Search

반응형

'static'에 해당되는 글 1건

  1. 2019.07.15 [Java_Tutorial]27강-자바 코딩, 클래스 멤버[Class Members, 자바 프로그래밍 기초 , 자바 튜토리얼]
반응형

[Oracle Java Tutorial을 읽고 순서에 의해 정리한 후 본인의 경험과 이해를 바탕으로 작성된 글임을 밝힌다.]

[Java Tutorial, 자바 프로그래밍 기초 배우기, Java Programming, 자바 튜토리얼]

클래스 멤버 이해하기(Understanding Class Members)

이번 포스팅에서는 클래스에 속한 static 키워드를 위한 필드와 메서드의 생성하는 것에 대해 얘기할 것이다.

클래스 변수(Class Variables)

많은 객체가 같은 클래스에서 생성될 때 그 객체들은 각각 별개의 인스턴스 변수들을 가지고 있다. 이 변수들은 각각 독립적으로 값을 가지고 있고 다른 메모리 위치에 저장된다.

가끔 모든 객체에 공통으로 사용할 수 있는 변수가 필요하다. 이런 경우 static 키워드를 사용하면 된다. static 수식어가 붙은 필드가 선언되면 static필드 또는 클래스 변수라고 부른다. static는 객체보단 클래스와 잘 어울린다. 모든 클래스의 인스턴스들은 한 군데 메모리에 고정되어 있는 클래스 변수를 공유한다. 어떤 객체도 클래스 변수의 값을 변경할 수 있다. 그런데 클래스 변수는 클래스의 인스턴스 생성 없이 다뤄진다.

static 필드의 예제를 확인해 보자

      public class TestInstance {

           private int a;

           private int b;

           private static int numCnt = 0;

          

      }

위에서 numCntTestInstance의 클래스 변수이며 클래스명에 .을 사용해서 접근한다.

     TestInstance.numCnt

이렇게 사용함으로써 클래스 변수로 확실히 인지된다.

사실 객체의 참조로 static필드를 참조할 수 있다.

     object.numCnt

그러나 이것이 클래스 변수라고 명확하게 인지하기 힘들 수 있다.

 

 

클래스 메서드(Class Methods)

자바 프로그래밍 언어(Java Programming Language)static필드처럼 static메서드도 지원한다. 선언할 때 static 수식어를 붙인 메서드는 클래스 이름으로 호출이 가능하다. 클래스의 인스턴스를 생성 및 이용할 필요가 없다.

     ClassName.methodName(args)

클래스 메서드 또한 클래스의 인스턴스로 접근이 가능하지만 그렇게 할 경우 클래스 메서드인지 판단하기 힘들 수 있다.

클래스 메서드의 일반적인 사용은 클래스 필드에 접근하기 위해서이다.

인스턴스와 클래스 변수와 메서드의 일부 조합은 허용되지 않는다.

  • 인스턴스 메서드는 인스턴스 변수와 인스턴스 메서드에 직접 접근할 수 있다.

  • 인스턴스 메서드는 클래스 변수와 클래스 메서드에 직접 접근할 수 있다.

  • 클래스 메서드는 클래스 변수와 클래스 메서드에 직접 접근할 수 있다.

  • 클래스 메서드는 인스턴스 변수 또는 인스턴스 메서드에 직접 접근할 수 없다.

무조건 객체의 참조를 이용해서 접근해야 한다. 그리고 클래스 메서드는 this키워드를 사용할 수 없다. this로 참조할 인스턴스가 없기 때문이다.

상수(Constants)

staticfinal 수식어를 같이 사용하면 상수로 사용된다. final수식어는 이 필드의 값을 바꿀 수 없음을 나타낸다.

아래 PI 상수를 선언하는 예제이다.

static final double PI = 3.14;

상수는 다시 할당되지 않는 방법으로 정의된다. 혹시 상수에 값을 할당하려는 시도를 하면 컴파일 에러가 발생한다. 협약에 따라 상수 이름은 대문자로 지정한다. 만약 이름이 여러 단어로 구성되어 있다면 단어 사이에 “_”를 붙여서 연결한다.

원시 데이터나 string으로 정의 된 상수의 값을 바꾸면 컴파일 시 여러 클래스에서 사용된 상수를 찾아 해당 값으로 대체한다. 컴파일 시 상수로 상수값을 바꿔야 할 경우라면 값을 바꾼 뒤 해당 상수를 사용한 클래스를 재 컴파일하면 현재 값으로 적용된다.

 

반응형