Frog is cry
멤버 본문
클래스에 선언된 필드와 메소드가 모두 객체 내부에 포함되는 것은 아니다.
객체가 있어야 사용 가능한 멤버가 있고, 그렇지 않는 멤버도 있다.
인스턴스 멤버 :
> 객체마다 가지고 있는 넘버, 객체를 생성한 후 사용할 수 있는 필드와 메소드
인스턴스 필드 :
> 힙 영역의 객체 마다 가지고 있는 멤버, 객체마다 다른 데이터를 저장
인스턴스 메소드 :
> 객체가 있어야 호출 가능한 메소드, 클래스 코드(메소드 영역)에 위치하지만, 이해하기 쉽도록 객체마다
가지고 있는 메소드라고 생각해도 됨.
정적 멤버 :
> 객체와 상관없는 멤버, 클래스 코드(메소드 영역)에 위치
> 클래스에 고정된 멤버로서 객체 생성하지 않고 사용할 수 있는 필드와 메소드
정적 필드 및 상수 :
> 객체 없이 클래스만으로도 사용 가능한 필드
정적 메소드 :
> 객체가 없이 클래스만으로도 호출 가능한 메소드
> 정적 메소드 선언 시 그 내부에 인스턴스 필드 및 메소드 사용 불가
> 정적 메소드 선언 시 그 객체 자신을 참조한 this 키워드 사용 불가
this
> 객체 내에서 인스턴스 멤버에 접근하기 위해 사용
> 생성자와 메소드의 매개 변수 이름이 필드와 동일할 경우, 필드 임을 지정하기 위해 주로 사용
인스턴스 멤버와 정적 멤버 선택 기준
> 객체마다 다를 수 있는 필드 값 -> 인스턴스 필드로 선언
ex) String color; // 계산기별로 색깔이 다를 수 있음
> 그렇지 않고 객체마다 다를 필요가 없는 필드값 -> 정적 필드로 선언''
싱글톤(singleton)
> 전체 프로그램에서 단 하나의 객체만 만들도록 보장하는 코딩 기법
싱글톤 작성 방법
> 클래스 외부에서 new 연산자 등에 생성자 호출하는 것 불가하도록 private 접근 제한자 사용
> 자신의 타입인 정적 필드 선언 후 자신의 객체 생성해 초기화
> 외부에서 호출할 수 있는 getInstance() 선언
> 정적 필드에서 참조하는 자신의 객체 리턴
final 필드
> 초기값이 저장되면 최종값이 되어 프로그램 실행 도중 수정 불가
final 필드의 초기값 주는 방법
> 단순 값일 경우 필드 선언 시 초기화(주로 정적 필드(상수)일 경우)
> 객체 생성 시 외부 데이터로 초기화 필요한 경우 생성자에서 초기화(주로 인스턴스 필드일 경우)
인스턴스 fianl 필드
> 객체에 한번 초기화된 데이터를 변경 불가로 만들 경우. ex) 주민번호
정적 final필드 (관례적으로 모두 대문자로 작성)
> 불변의 값인 상수를 만들 경우. ex) PI