Chapter6. 클래스_5

박경희·2023년 6월 6일
0

공부를 해보자

목록 보기
11/38

6-5 인스턴스 멤버와 정적 멤버

  • 인스턴스 멤버 - 객체마다 가지고 있는 멤버
  • 정적 멤버 - 클래스에 위치시키고 객체들이 공유하는 멤버

인스턴스 멤버와 this

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

정적 멤버와 static

  • 정적 멤버는 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메소드를 말한다.
  • 정적 필드와 메소드를 선언하려면 필드와 메소드 선언 시 static 키워드를 붙이면 된다.
  • 필드 선언 시 인스턴스 필드로 선언할지 정적 필드로 선언할지의 판단 기준은?
    -> 객체마다 가지고 있어야 할 데이터라면 인스턴스 필드로 선언, 객체마다 가지고 있을 필요가 없는 공용 데이터라면 정적 필드로 선언하는 것이 좋다.
  • 메소드 선언시 인스턴스 메소드와 정적 메소드 선언의 판단 기준은?
    -> 인스턴스 필드를 포함하고 있다면 인스턴스 메소드로 선언, 인스턴스 필드를 포함하고 있지 않다면 정적 메소드로 선언한다.
public class Calculater {
	String color;			   						   //인스턴스 필드
    void setColor(String color) {this.color = color;}  // 인스턴스메소드
    static int plus(int x, int y) {return x + y;}      // 정적 메소드
    static int minus(int x, int y) {return x - y;}     // 정적 메소드

정적 멤버 사용

-> p275 참고

싱글톤

  • 단 하나만 생성되는 객체
  • 클래스 외부에서 new 연산자로 생성자를 호출할 수 없도록 만들어야 한다.
    (클래스 내부에서는 가능하다.)
  • 생성자를 외부에서 호출할 수 없도록 하려면 생성자 앞에 private 접근 제한자를 붙여주면 된다.
  • 정적 필드도 private 접근 제한자를 붙여 외부에서 필드값을 변경하지 못하도록 한다.
  • 대신 외부에서 호출할 수 있는 정적 메소드인 getInstance()를 선언하고 정적 필드에서 참조하고 있는 자신의 객체를 리턴해준다.(외부에서 객체를 얻는 유일한 방법이다. getInstance()메소드는 단 하나의 객체만 리턴한다.)

final 필드와 상수

final

  • final 필드는 초기값이 저장되면 이것이 최종적인 값이 되어서 프로그램 실행 도중에 수정할 수 없다는 것이다.
    (1. 필드 선언시 초기값 주기 or 2. 생성자에서 초기값 주기.)

상수

  • 불변의 값을 저장하는 필드를 자바에서 상수라고 부른다.(final 필드는 객체마다 저장되고, 생성자의 매개값을 통해서 여러 가지 값을 가질 수 있기 때문에 상수가 아니다.)
  • 상수는 static이면서 final이어야 한다.
static final 타입 상수 = 초기값;
  • 상수 이름은 모두 대문자로 작성하는 것이 관례다. 혼합된 단어는 언더바(_)사용.

마무리

  • p287 싱글톤 만들기 안보도 다시 해보자! getInstance()!!

*참고 혼자공부하는자바 신용권 지음 한빛미디어.

0개의 댓글