Class 의 구성요소
1. 멤버 변수
- 클래스 멤버변수
ㄴ 클래스의 상태
ㄴ Class 메모리 로드 시 1번만 할당됨
- 인스턴스 멤버변수
ㄴ 객체의 상태
ㄴ 객체 생성시마다 할당됨
2. 메서드
- 클래스 메서드(static)
ㄴ 클래스 관점에서의 행위
ㄴ 객체 식별을 해야만 하는 작업이 아닌 경우
ㄴ 객체를 생성 안하고 메서드 실행이 가능하다!
- 인스턴스 메서드
ㄴ 객체 관점에서의 행위
ㄴ 객체 식별을 해야하는 작업인 경우
ㄴ 객체 관련 작업을 포함
3. 생성자
- 객체 초기화의 다양성을 제공한다.
4. 중첩 클래스(Nested Class, Inner Class)
- 클래스 안에 클래스가 있는 형태
- outer 클래스의 멤버들을 상속받은 것처럼 사용 가능하다. (실제 상속받은건 X)
- 생성과 동시에 정의해서 1회성으로 사용하는 익명 내부클래스도 존재한다.
5. initializer (초기화자)
- Static initializer ( static { 실행문장 } )
ㄴ 클래스 메모리 로드 시 자동실행
- instance initializer ( { 실행문장 } )
ㄴ 객체 생성시마다 자동실행
ㄴ 생성자가 있기 때문에 잘 사용되지 않는다.
Class 작성
Package 선언문
package domain;
물리적으로 폴더의 기능을 한다.
Unique한 특성을 가지기 위해 domain name을 역순으로 하여 사용한다.
Import 문
import class_Name;
import Interface_Name;
import의 단위는 패키지가 아니라 Class, interface이다.
현재 클래스 안에서 참조, 사용하는 클래스가 자신과 같은 패키지가 아닌 경우에는 명시
(단, java.lang 패키지는 자동으로 import됨)
Class 정의
[접근지정자] [활용지정자] class c_Name [extend 부모_Name] [ implements 인터페이스,,,]
접근지정자 (공개 범위)
- outer Class ⇒ default, public 사용 가능
- Inner Class ⇒ default, public, private, protected 사용 가능
활용지정자 (사용방법)
- final ⇒ 상속 금지
- abstract ⇒ 추상 클래스
Class_Name
- 명사형
- 첫글자는 대문자 사용, 나머지는 Camel Case
Class 정의 - (1) 멤버변수
[접근지정자] [활용지정자] Data_Type 변수_Name [ = 초기값]
접근지정자
- private ⇒ 클래스 내에서만 접근 가능
- public ⇒ 모든 클래스에서 접근 가능
- protected ⇒ 자식인 경우 public, 나머지는 default로 동작한다.
- default ⇒ 같은 패키지 내의 클래스에서 접근 가능
활용지정자
- static ⇒ class 멤버변수
- final ⇒ 상수
- transient ⇒ 객체직렬화 대상 제외 (다시 공부하자...)
변수_Name
- 명사형
- 첫글자는 소문자, 나머지는 Camel Case
Class 정의 - (2) 메서드
[접근지정자] [활용지정자] Return_Type method_Name([매개변수,,,]) [throws 구문] {}
접근지정자
- private, public, protected, default
활용지정자
- static ⇒ class 메서드
- final ⇒ 재정의 불가
- Synchronized ⇒ 객체의 점유권을 가지고 있는 경우에만 사용할 수 있음 (세마포어와 비슷)
- abstract ⇒ 구현부가 생략될때만 사용 가능 (하위 클래스를 통해 재정의하라고 명시)
method_Name
- 동사형
- 첫글자는 소문자, 나머지는 Camel Case
Class 정의 - (3) 생성자
[접근지정자] Class_Name([매개변수,,,]) [throws 구문] {}
접근지정자
- private, public, protected, default