복습복습복습, 이제 그만 놉시다
인스턴스 멤버
객체(인스턴스) 생성 후 사용 가능한 필드와 메소드, 각각 인스턴스 필드와 인스턴스 메소드로 불림
객체 없이 사용 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 메소드 자동 생성 기능 있음.

