본문 바로가기

Java/Chapter 10. 클래스 변수와 클래스 메소드

(4)
[Java] 10.04 - 또 다른 용도의 static 선언 들어가며 static 선언은 클래스 변수와 클래스 메소드의 선언 이외에 다른 용도로도 사용이 된다. 사용 빈도가 높지는 않으나 상황에 따라 유용하게 사용될 수 있으니 알아두는 것이 좋다. static 초기화 블록(Static Initialization Block) 다음 클래스 정의를 보자. 이 클래스에는 프로그램의 실행 날짜를 저장할 목적으로 변수가 하나 선언되어 있다. 그리고 이 변수는 변경의 대상이 이니고, 참조만을 목적으로 하므로, '클래스 변수'로 선언을 하였다. class DateOfExecution{ static String date; // 프로그램의 실행 날짜를 저장하기 위한 변수 public static void main(String[] args){ System.out.println(dat..
[Java] 10.03 - System.out.println() & public static void main() 들어가며 지금까지 main 메소드를 정의할 때 그 앞에 static 선언을 붙여왔다. 그리고 인스턴스의 생성 없이 println 메소드를 호출해 왔다. 어케했ㄴ노 System.out.println()에서 out과 println의 정체는? static 선언의 의미를 알았으니, System.out.println의 구성을 이해할 수 있다. 일단 System은 자바에서 제공하는 클래스로, java.lang 패키지에 묶여 있다. 따라서 원칙적으로는 다음과 같이 호출하는 것이 맞다. java.lang.System.out.println( . . . ); 그러나 컴파일러가 다음 문장을 삽입해주기 때문에 패키지의 이름 부분을 생략할 수 있다. import java.lang.*; // 컴파일러가 삽입하는 import 선언..
[Java] 10.02 - static 선언을 붙여서 선언하는 클래스 메소드 들어가며 클래스 내에 정의된 메소드에 static 선언을 하면 '클래스 메소드'가 된다. 그리고 클래스 메소드는 그 성격이 클래스 변수와 유사하다. 접근 방법도 동일하며, 인스턴스 생성 이전부터 호출이 가능한, 그리고 어느 인스턴스에도 속하지 않는 메소드라는 점도 클래스 변수와 유사하다. 클래스 메소드의(static 메소드의) 정의와 호출 앞서 공부한 클래스 변수의 특성 2가지는 다음과 같다. 인스턴스 생성 이전부터 접근이 가능하다. 어느 인스턴스에도 속하지 않는다. 이 두가지는 클래스 메소드도 동일하게 갖는 특성이다. 따라서 이 사실을 다음 예제를 통해서 확인해보겠다. 더불어 클래스 변수의 접근 방법과 동일한 '클래스 메소드의 호출 방법'도 확인해보자. class NumberPrint { private..
[Java] 10.01 - static 선언을 붙여서 선언하는 클래스 변수 들어가며 '인스턴스 변수'는 인스턴가 생성되었을 때, 생성된 인스턴스 안에 존재하는 변수이다. 그러나 '클래스 변수'는 인스턴스의 생성과 상관없이 존재하는 변수이다. 선언된 클래스의 모든 인스턴스가 공유하는 '클래스 변수(static 변수)' 클래스 내에 선언된 변수 앞에 static 선언을 붙이면 이는 인스턴스 변수가 아닌 '클래스 변수'가 된다. 이러한 클래스 변수의 특성을 파악하기 위해서 다음 예제를 관찰하자. 이 예제는 클래스 변수의 이해에 초점이 맞춰져 있어서 이 예제만으로도 클래스 변수의 기본 특성을 파악할 수 있을 것이다. class InstCnt{ static int instNum = 0; // 클래스 변수 (static 변수) InstCnt(){ // 생성자 instNum++; // st..