본문 바로가기
Back-End/Java

클래스 - 02

by newny 2022. 12. 16.
반응형

인스턴스 멤버

  • 인스턴스 필드, 인스턴스 메소드
  • 객체마다 가지고 있는 멤버, 객체를 생성한 후 사용 가능
  • 인스턴스 메소드는 객체 내부에 존재하지 않고 메소드 영역에 저장되고 공유됨, 인스턴스 메소드라 불리는 이유는 메모리 블록 내부의 인스턴스 필드 등이 사용되는 경우 객체 없이 사용이 불가하기 때문

 

 this 키워드

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

 

정적 멤버

  • 정적 필드, 정적 메소드
  • 클래스에 고정된 멤버, 객체를 생성하지 않고 사용 가능
  • 정적 멤버는 메소드 영역에 저장됨
  • 개체마다 가지고 있을 필요가 없는 공용 데이터라면 정적 필드로 선언하는 것이 좋음
  • static 키워드를 붙이면 됨

 

정적 메소드 사용 시 주의할 점

  • 객체 없이도 메소드가 실행되어야 하기 때문에 인스턴스 멤버와 관련된 것은 사용불가

 

도트(.) 연산자

  • 클래스 이름과 함께 도트(.) 연산자로 접근 (클래스명.필드;)

 

final 필드

  • final이 선언되면 저장된 초기값을 변경할 수없음
  • 초기값 변경 방법
    • 필드 선언 시에 초기값을 주는 방법
    • 생성자에서 주는 방법

 

상수

  • 불변의 값을 저장하는 필드
  • 객체마다 저장할 필요가 없음
  • 한 개의 값만 갖기 때문에 static이면서 final인 특성을 가져야 함
  • 상수 이름은 대문자와 언더바(_)로 작성함
  • 정적 필드이므로 클래스로 접근해서 읽음

 

패키지

  • 디렉토리와 같은 역할을 하지만 디렉토리만을 의미하지 않고, 클래스의 일부분으로써 클래스를 식별하는 용도로 사용
  • 상위 패키지와 하위 패키지를 도트(.)로 구분
  • 패키지 이름은 모두 소문자로 작성하는 것이 관례
  • 패키지 이름이 서로 중복되지 않도록 회사 도메인 이름의 역순으로 작성하고, 마지막에 프로젝트 이름을 붙여주는 것이 일반적

 

import문

  • 다른 패키지의 클래스를 사용할 때 import문 이용
  • 클래스의 이름이 동일할 때 어떤 패키지의 클래스인지를 명시해야 할 때 사용
  • 동일한 패키지에 포함된 다수의 클래스를 사용해야 한다면 클래스 이름을 생략하고 *를 사용할 수 있음

 

접근 제한자

  • 클래스의 접근 제한 : public, (default)
  • 생성자의 접근 제한 : 모두 사용 가능
  • 필드와 메소드의 접근 제한 : 모두 사용 가능
접근제한자 제한 범위
public  ↕ 없음
protected  ┐ 같은 패키지이거나, 자식 클래스만 사용 가능
(default) ↔   같은 패키지
private  ㆍ 객체 내부

같은 패키지 : 기준 패키지 기준으로 상위 패키지는 같은 패키지, 하위패키지는 포함X → 하위패키지 기준 상위패키지는 같은 패키지에 포함되나, 상위패키지 기준 하위패키지는 같은 패키지로 포함되지 않기 때문

 

 

Getter와 Setter

  • 객체의 무결성을 보존하기 위해 사용
  • Setter 메소드 : 데이터를 검증하여 유효한 값만 필드에 저장하기 위한 메소드
  • Getter 메소드 : 필드 값을 가공한 후 외부로 전달하기 위한 메소드

 

싱글톤 패턴

  • 단 하나의 객체만 만들도록 보장해야 하는 경우
  • 외부에서 접근할 수 없게 private 접근 제한자를 붙여 자신의 타입인 정적 필드를 하나 선언
  • 선언함과 동시에 자신의 객체를 생성해 초기화시킴 (외부에서 객체 생성을할 수 없기 때문에 내부에 미리 객체 생성)
  • 클래스 외부에서 객체 생성을 할 수 없게 해야 하므로 생성자 앞에 private 접근 제한자를 사용함
  • 대신 메소드는 외부에서 호출이 가능하도록 정적 메소드인 getInstance()를 선언하고 정적 필드에서 참조하고 있는 자신의 객체를 리턴해줌
public class 클래스명 {
	//정적필드
	private static 클래스명 singleton = new 클래스명();

	//생성자
	private 클래스명() {}

	//정적 메소드
	static 클래스명 getInstance() {
		return singleton;
	}
}
  • 외부에서 객체를 얻는 유일한 방법은 getInstance() 메소드를 호출하는 방법
//호출방법
싱글톤클래스명 변수명1 = 싱글톤클래스명.getInstance();
반응형

'Back-End > Java' 카테고리의 다른 글

상속 - 01  (0) 2022.12.21
클래스 - 01  (0) 2022.12.11
참조 타입  (0) 2022.12.09

댓글