객체(Object) - 클래스(Class) / 필드(Field)
객체
- 현실 세계에서 독립적으로 존재하는 것(유형, 무형, 개념 등)
- 여러 개의 자료형과 여러 개의 데이터를 한 번에 보관하고 기능을 더한 것
- 자신의 속성(값, data)과 기능(동작, 행동)을 다른 것들 과 구분되어 식별 가능
- Field : 속성
- Method : 기능
클래스
- 객체의 특성(속성, 기능)에 대한 정의
- 추상화(abstraction), 캡슐화(encapsulation) 적용 필수
- 설계서
- 접근 제한자
- public : 전체
- default : 같은 패키지 내
- class 선언
[접근 제한자] [예약어] class [class명] {
// 1. 필드(인스턴스 변수, 멤버 변수): 객체의 속성 정의
[접근 제한자] [예약어] [자료형] [필드명];
// 2. 생성자
[접근 제한자] [class명](매개변수) { // 위의 class명과 동일
...
// 필드 조회, ...
}
// 3. 메소드: 객체의 기능 정의
[접근 제한자] [예약어] [반환형] [메소드명](매개변수) {
...
}
}
추상화(abstraction)
- 유연성을 확보하기 위해 구체적인 것은 제거
- 작성하려는 class의 속성과 기능 중 프로그램 내에서 필요한 공통점을 추출하고 불필요한 공통점은 제거하는 과정
캡슐화(encapsulation)
- 추상화를 통해 정리된 데이터들과 기능을 하나로 묶어 관리하는 기법
- class의 가장 중요한 목적인 데이터의 접근 제한을 원칙으로 하여 class 외부에서 데이터의 직접 접근을 막고, 대신 데이터 처리하는 함수들을 class 내부에서 작성하는 방법
Field(멤버 변수)
- class 내에 정의 된 속성
- 접근 제한자
- public(+) : 해당 클래스 내부, 같은 패키지 내, 후손 클래스 내, 전체
- protected(#): 해당 클래스 내부, 같은 패키지 내, 후손 클래스 내
- default(~): 해당 클래스 내부, 같은 패키지 내
- private(-): 해당 클래스 내부
[접근 제한자] [예약어] class [class명] {
[접근 제한자] [예약어] 자료형 변수명 = [초기값];
}
public class Academy {
public int temp1;
protected int temp2;
int temp3; //접근제한자 생략 시 default
private int temp4; //캡슐화 원칙으로 private 사용
}
필드 예약어
1) static
- 같은 타입의 여러 객체가 공유할 목적의 필드에 사용하며, 프로그램 시작 시에 정적 메모리(static) 영역에 자동 할당되는 멤버에 적용
- 정적멤버, 클래스멤버라고 부름
- 필드는 인스턴스 생성 시에 메모리에 저장되지만 static필드는 프로그램 시작할 때 바로 저장
- 객체 생성하지 않고 바로 사용 가능
- ex) Math / Arrays / System / …
- 객체 생성하지 않고 바로 사용 가능
public class Academy {
private static int temp1;
}
2) final
- 정해진 값 하나만 저장하는 변수
- 변경 불가능
public class Academy {
private final int TEMP1 = 100;
private int temp4;
}