[Java] 4. 5 정적 멤버와 static, 상수화에 사용하는 final 키워드

출간일 2016년 11월 28일

판매가 2000원

형태 ebook

이 책의 모든 내용은 http://ehpub.co.kr에 공개하고 있습니다.

학습에 도움이 되시면 ebook을 구입하여 소장하시면 감사하겠습니다.

언제나 휴일 출판사의 수익금의 대부분은 아프리카에 기부하고 있습니다.


 

클래스를 정의할 때 멤버 앞에 static 키워드를 명시할 수도 있으며 static 키워드를 명시하면 정적 멤버라고 부릅니다.

 

static 키워드를 명시하지 않은 멤버 필드는 개체(인스턴스라고도 부름)마다 상태를 기억하기 위한 영역을 부여합니다. 하지만 static 키워드를 명시하면 멤버 필드를 캡슐화하면 해당 형식에 상태를 기억하기 위한 영역을 부여하며 정적 멤버 필드라고 부릅니다.

 

어떠한 곳에 정적 멤버 필드를 사용하는지 예를 들어 볼게요.

 

Unit 클래스를 정의한다고 가정합시다. 그리고 Unit 개체마다 일련 번호가 있고 생성 순서대로 1부터 순차적으로 부여하려고 합니다. 이를 위해서는 가장 최근에 부여한 Unit 개체의 일련 번호를 기억하고 있어야 합니다. 그런데 이 값은 어디에 기억하고 있어야 할까요? 가장 최근에 부여한 Unit 개체의 일련 번호는 Unit 개체마다 기억해야 하는 것이 아니고 Unit 클래스 전체 영역에 하나만 필요합니다. 이 때 정적 멤버 필드로 정의하는 것입니다.

 

그리고 public으로 접근 지정한 멤버를 다른 형식에서 접근할 때 개체의 멤버는 참조하는 변수로 접근하지만 정적 멤버를 접근할 때는 클래스 이름으로 접근합니다.

[그림 4.4] 정적 멤버와 개체의 멤버
[그림 4.4] 정적 멤버와 개체의 멤버
다음은 정적 멤버 필드를 이용한 개체의 일련 번호 부여하는 예제 코드입니다.

실행 화면

정적 멤버 필드 중에 개체 상태의 최대값이나 최소값처럼 변하지 않는 상수를 지정할 때는 final 키워드를 사용합니다.

 

메서드 내에서 변하지 않는 상수를 표현할 때는 const 키워드를 붙여 상수를 표현하며 형식 전체에서 사용할 상수를 표현할 때는 static 키워드와 final 키워드를 사용합니다.

 

다음은 정적 멤버 필드에 fianl 키워드를 명시하여 상수를 지정한 예제 코드입니다.

실행 화면

물론 정적 멤버가 아닌 일반 멤버 필드에 final 키워드를 명시하면 개체의 변하지 않는 상수를 캡슐화할 수 있습니다. 예를 들어 학생 데이터를 표현할 때 번호를 생성할 때 부여하고 이 후에는 변하지 않게 상수화할 필요가 있다면 final 키워드를 명시하여 정의합니다.

 

다음 예제는 학생 클래스를 정의하는 예제입니다. 정적 멤버로 가장 최근에 부여한 학생의 번호를 기억하는 last_num이 있고 학생 변수를 fianl 키워드를 명시하여 상수화하였습니다.

실행 화면