클래스 문법의 용도
1. 사용자 정의 데이터 타입 만들 때 (새로운 구조의 메모리를 설계할 때)
2. 관련된 기능의 메서드를 묶을 때
중첩 클래스(nested class)
다른 클래스 안에 정의된 클래스. 그 클래스 안에서만 사용됨.
1. 스태틱 중첩클래스
- 소유하고 있는 클래스 뿐만 아니라 다른 클래스도 사용 가능
2. 논-스태틱 중첩클래스
- 특정 인스턴스에 종속된 클래스인 경우 논스태틱 중첩으로 정의
3. 로컬 클래스
- 메서드 블럭 안에 정의된 클래스. 그 메서드 블럭 안에서만 사용 가능
4. 익명 클래스
-클래스 이름이 없는 중첩 클래스. 딱 한 개의 인스턴스를 생성할 때 사용하며, new로 생성
◎ 스태틱 멤버는 논-스태틱 중첩 클래스를 사용할 수 없다.
◎ 논-스태틱 멤버는 스태틱 중첩 클래스를 사용할 수 있다.
◎ 다른 패키지의 클래스 사용시 import할 때 패키지 이름을 항상 붙여야 컴파일 가능하다.
◎ import 패키지명.*; 와일드카드 사용 가능하지만 구체적으로 적기
◎ java.lang 패키지에 있는 클래스는 패키지를 지정하지 않아도 됨. 그 하위 패키지는 해당 없음
◎ main( ) { } 블럭 안에서 정의한 클래스는 그 안에서만 사용 가능하다.
◎ GRASP(General Responsibility Assignment Software Patterns) 패턴
=> Information Expert: 데이터를 다룰 때는 그 데이터를 갖고 있는 객체에게 묻는다.
◎ 인스턴스 메서드를 호출할 때 넘겨준 인스턴스 주소는 this 라는 내장 변수(built-in)에 자동으로 보관된다.
◎ 멤버의 접근 범위 설정
=> public: 모두 공개
=> protected: 서브 클래스와 같은 패키지의 멤버는 접근 가능
=> (default): 같은 패키지의 멤버는 접근 가능
=> private: 접근 불가! 그 멤버가 속한 클래스의 내부에서만 접근 가능
◎ 생성자 도입: 인스턴스를 생성할 때 값을 초기화시키는 특별한 메서드
◎ 인스턴스 변수 = 논스태틱 변수
A obj1 = new A();
new로 생성된 메모리 = 인스턴스 or 객체
obj1 = 레퍼런스
A의 v1, v2 = 인스턴스 변수
◎ 클래스 로딩
외부 저장장치에 있는 .class 파일을 JVM이 관리하는 메모리로 로딩하는 것.
코드를 사용하는 시점에 Method Area에 로딩되며, 한 번만 로딩됨.
◎ 인스턴스 메서드와 클래스 메서드
1) 클래스 메서드 = static 메서드 => static 붙은 메서드이다. => 클래스 이름으로 호출할 수 있다. |
2) 인스턴스 메서드 = non-static 메서드 => static 이 붙지 않은 메서드이다. => 인스턴스 주소가 있어야만 호출할 수 있다. |
실무 > 일단 인스턴스 메서드로 무조건 만들라! > 인스턴스 변수를 완전히 사용하지 않음을 확신하면 그 때 클래스 메서드로 전환하라! |
◎ 로컬 변수는 자동으로 초기화 되지 않기때문에 사용 전 반드시 초기화 해야함.
int i = 0;
◎ 클래스 변수(스태틱 변수) & 인스턴스 변수는 생성되는 순간 0으로 자동 초기화 된다.
◎ Math 클래스
Math 클래스는 수학 관련 메서드를 모아둔 클래스이다. 전체 메서드가 "클래스 메서드=스태틱 메서드"이다. => 절대값 계산 System.out.println(Math.abs(-200)); => ceil() : 파라미터로 주어진 부동소수점이 바로 위 큰 정수 값을 리턴 => floor() : 파라미터로 주어니 부동소수점의 바로 밑 작은 정수 값을 리턴 System.out.println(Math.ceil(3.28)); // 4 System.out.println(Math.floor(3.28)); // 3 System.out.println(Math.ceil(-3.28)); // -3 System.out.println(Math.floor(-3.28)); // -4 => 2의 7승 값을 알고 싶을 때 System.out.println(Math.pow(2, 7)); => 반올림하여 정수 값 리턴 System.out.println(Math.round(3.14)); System.out.println(Math.round(3.54)); |
◎ Calendar 클래스
Calendar 클래스 오늘 날짜 및 시간 정보를 저장한 객체를 만들어 리턴한다. 달력은 그레고리안 달력을 사용한다. Calendar c = Calendar.getInstance(); System.out.println(c.get(Calendar.YEAR)); // 년도 System.out.println(c.get(Calendar.MONTH) + 1); // 월(0 ~ 11) System.out.println(c.get(Calendar.DATE)); // 일 System.out.println(c.get(Calendar.DAY_OF_WEEK)); // 요일(1 ~ 7) System.out.println(c.get(Calendar.WEEK_OF_MONTH)); // 그 달의 몇 번째 주 System.out.println(c.get(Calendar.HOUR)); // 시(0 ~ 11) System.out.println(c.get(Calendar.HOUR_OF_DAY)); // 시(24시) System.out.println(c.get(Calendar.MINUTE)); // 분 System.out.println(c.get(Calendar.SECOND)); // 초 |
◎ Date 클래스
Date 클래스 날짜 데이터를 문자열로 다룰 때 yyyy-MM-dd 형식으로 다루기 때문에 편리하다. // 스태틱 메서드 활용 long currMillis = System.currentTimeMillis(); // 생성자 활용 java.sql.Date today = new java.sql.Date(currMillis); // 인스턴스 메서드 활용 String str = today.toString(); System.out.println(str); |
'ㅋㅌ' 카테고리의 다른 글
.cotains() & toLowerCase(); (0) | 2023.06.20 |
---|---|
자바 메서드 (0) | 2023.06.20 |
[java] 정수를 문자열로 (0) | 2023.06.17 |
정수 -> 문자, i번째 문자-> string -> 정수 (0) | 2023.06.15 |
자바 문법 정리 (0) | 2023.06.14 |