복습복습복습, 이제 그만 놉시다
인스턴스 멤버
객체(인스턴스) 생성 후 사용 가능한 필드와 메소드, 각각 인스턴스 필드와 인스턴스 메소드로 불림
객체 없이 사용 X
객체마다 가지고 있어야하는 데이터 사용 시 인스턴스 필드로 선언
클래스에서 필드, 생성자, 메소드 선언하고 this를 이용해서 인스턴스 멤버에 접근
정적멤버
클래스에 고정된 멤버, 객체 생성 X
정적 필드, 정적 메소드라 부름
객체마다 가질 필요 없는 공용 데이터 사용 시 정적 필드 선언
정적 멤버 선언
정적 필드와 정적 메소드 선언 시 static
키워드 추가 해주면 됨.
정적 필드: static 타입 필드
정적 메소드: static 리턴타입 메소드 (매개변수선언, ...)
정적 멤버 사용
클래스가 메모리로 도딩되면 바로 사용 가능
클래스 이름과 도트 연산자로 접근
Calculator 클래스
정적필드와 정적메소드임으로 객체 생성은 하지 않음.
싱글톤
단 하나의 객체만 만들도록 보장 해야할 때 하나만 생성되는 객체
클래스 외부에서 생성자 호출을 막기 위해 private
접근제한자를 붙여줌
getInstance()
선언 후 정적 필드에서 참조하고 있는 자신의 객체 리턴getInstance()
메소드는 단 하나의 객체만 리턴함.public class 클래스 {
//정적 필드
private static 클래스 singleton = new 클래스();
//생성자
private 클래스() {}
//정적 메소드
static 클래스 getInstance() {
return singleton;
}
}
final 필드는 초기값이 최종값이 됨. 프로그램 실행 도중 수정 X
초기화되지 않은 final 필드가 남아있으면 컴파일 에러 발생
상수
불변의 값(원주율, 지구의 무게 및 둘레 등)을 저장하는 필드
객체마다 저장할 필요없는 공용성을 띠며, 수정이 불가능함 -> static final
필드가 상수를 의미함.
상수 이름은 관례적으로 모두 대문자로 작성함.
클래스가 속할 패키지를 정하는 것
클래스 이동 시 패키지 전체를 이동 해야 함.
패키지 이름
_
혹은 $
를 제외한 특수문자 X도메인명.회사명.프로젝트명
으로 작성함다른 패키지에 있는 클래스, 인터페이스 사용 시 import문으로 가져와 컴파일러에게 알려줌.
Tire 클래스가 두 패키지 모두 가지고 있어서 필드
import문 자동 추가 기능
이클립스에서 자동으로 사용된 클래스 조사해 필요한 import문을 추가하는 기능을 제공함
Cntrl
+ Shift
+ O
접근(클래스, 인터페이스, 각종 멤버들의 접근을 뜻함)을 제한하는 경우
접근제한자 종류
public > protected > default > private
선언된 클래스를 다른 패키지에서 사용할 수 없음.
클래스 선언시 public을 생략하면 default 접근 제한을 가짐
패키지 위치에 제한없이 사용 가능함.
라이브러리 클래스 개발시 반드시 사용
클래스 선언 시 public을 붙이면 public 접근 제한을 가짐.
패키지 package1
에 클래스 A
를 default 접근 제한
패키지 package1
에 클래스 B
를 public 접근 제한으로 선언
클래스 A
는 default 접근 제한이고 같은 패키지이기 때문에 클래스 B
에서 접근 가능.
클래스 C
는 다른 패키지에 선언된 클래스 이므로 default 접근 제한인A
클래스는 접근할 수 없다. (-> 컴파일 에러 발생)
public, default는 클래스 접근 제한과 동일한 접근 제한을 가짐
getInstance()
정적 메소드를 선언함.같은 A 클래스 내부에서 A의 모든 생성자 호출 가능
B 클래스는 A 클래스와 동일한 패키지지만, private 접근 제한 생성자는 호출할 수 없음.
다른 패키지에 C 클래스 선언 시 public 접근 제한을 제외한 나머지는 호출할 수 없음.
생성자 접근 제한과 마찬가지로 public, default, protected, private 네 가지 접근 제한을 가짐
A 클래스 내부에서 접근 제한 상관없이 필드와 메소드 사용 O
A 클래스와 동일한 패키지에선 private 접근 제한을 제외하곤 호출 가능
패키지가 다른 C 클래스에서는 A 클래스의 private와 default 접근 제한은 호출할 수 없음
객체 필드를 외부에서 직접적으로 수정할 경우 객체 무결성이 깨질 수 있음.
객체 지향 프로그래밍에서 메소드를 통해 필드 변경을 할 수 있도록 하는 메소드가 Getter과 Setter
클래스 선언 시 필드는 private로 선언해서 외부로부터 보호
private 타입 fieldName;
Getter
외부에서 객체의 데이터 읽을 때 사용
메소드로 필드값 가공 후 외부로 전달
메소드 선언 방법
public 리턴타입 getFieldName() { return fieldName; }
- 접근 제한자: public
- 리턴 타입: 필드 타입
- 메소드 이름: get + 필드 이름(첫 글자 대문자)
- 리턴값: 필드값
필드 타입이 boolean일 경우 메소드 이름에 get대신 is 사용
Setter
매개값 검증 후 유효한 값만 객체의 필드로 저장
메소드 선언 방법
public void setFieldName(타입 fieldName) { this.fieldName = fieldName; }
- 접근 제한자: public
- 리턴 타입: void
- 메소드 이름: set + 필드 이름(첫 글자 대문자)
- 매개변수: 필드 타입
이클립스에 Getter과 Setter 메소드 자동 생성 기능 있음.