ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 인스턴스 멤버와 정적 멤버
    카테고리 없음 2022. 10. 2. 22:04

      인스턴스 멤버와 정적 멤버

    인스턴스 멤버는 객체마다 가지고 있는 멤버를 말하고, 정적 멤버는 클래스에 위치시키고 객체들이 공유하는 멤버를 말합니다.


    인스턴스 멤버는 객체를 생성한 후 사용할 수 있는 필드와 메소드를 말하며 인스턴스 필드와 메소드는 객체에 소속된 멤버이기 때문에 객체 없이는 사용할 수 없습니다.


      this

    객체 내부에서 인스턴스 멤버에 접근하기 위해 사용합니다.
    this는 주로 생성자와 메소드의 매개 변수 이름이 필드와 동일한 경우, 인스턴스 멤버인 필드임을 명시하고자 할 때 사용됩니다.

    this 사용

    6번째 줄의 this.model은 2번째 줄의 model을 가리키고 '=' 옆에 model은 5번째 줄의 model을 가리킵니다.

    10번째 줄도 마찬가지로 this.speed는 3번째 줄의 speed를 가리키고 '=' 옆에 speed는 9번째 줄의 speed를 가리킵니다.

    this 사용 안함

    하지만 위 모습과 같이 매개 변수의 이름이 필드의 변수명과 다를 경우 this를 사용하지 않아도 됩니다.

     

     

      정적 멤버와 static

    정적(static)은 고정된 이라는 의미입니다. 정적 멤버는 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메소드를 말합니다.

    정정 필드와 정적 메소드를 선언하려면 필드와 메소드 선언 시 static 키워드를 추가하시면 됩니다.
    정적 멤버는 아래와 같은 방식으로 사용할 수 있습니다.

    좌측은 원래 방식입니다. new 연산자를 사용해 객체를 생성해 사용합니다.

    우측은 static을 사용한 방식입니다. ststic으로 정적 필드와 메소드를 선언하여 객체를 생성하지 않고 사용합니다.


    또한 정적 필드와 정적 메소드는 클래스에 고정된 멤버이므로 클래스 로더가 클래스를 로딩해서 메소드 메모리 영역에 적재할 때 클래스 별로 관리됩니다. 따라서 클래스의 로딩이 끝나면 바로 사용할 수 있습니다.
    그러므로 필드를 선언할 때 객체마다 가지고 있어야 할 데이터라면 인스턴스 필드로 선언하고, 공용 데이터라면 정적 필드로 선언하는 것이 좋습니다.
    그리고 정적 메소드 선언 시 정적 메소드 내부에서 인스턴스 필드나 인스턴스 메소드를 사용할 수 없습니다. 만약 정적 메소드 내부에서 인스턴스 멤버를 사용하고 싶다면 정적 메소드 내부에 객체를 생성하면 됩니다.

     

     

      싱글톤

    프로그램에서 단 하나만 생성되는 객체를 싱글톤이라고 합니다.
    싱글톤을 만들려면 클래스 외부에서 new 연산자로 생성자를 호출할 수 없도록 막아야 합니다. 그러기 위해서는 생성자 앞에 private 접근 제한자를 붙여주면 됩니다.


    자신의 타입인 정적 필드를 하나 선언하고 자신의 객체를 생성해 초기화합니다. 정적 필드도 private를 붙여 외부에서 필드 값을 변경하지 못하도록 막습니다.
    그리고 외부에서 호출할 수 있는 정적 메소드인 getInstance()를 선언하고 정적 필드에서 참조하고 있는 자신의 객체를 리턴해 주고 외부에서 getInstance() 메소드를 호출하여 객체를 얻습니다.

     

     

      final 필드와 상수

    final은 한번 값이 설정되면 재할당이 불가능합니다.
    상수(static final)도 final과 유사한 성질을 가지고 있습니다. 상수도 한번 값이 설정되면 재할당이 불가능합니다.
    그러나 final은 객체마다 하나씩 가질 수 있으며 생성자의 매개 값을 통해 다양한 값을 가질 수 있지만 상수는 객체마다 저장할 필요가 없는 공용성을 띄고 있습니다.
    즉 상수는 매개 값을 통해 값이 변경될 수 없는 고유의 값을 가지고 있습니다.

Designed by Tistory.