객체의 특성(속성, 기능)에 대한 정의를 한 것
→ 보통 클래스를 설계도에 비유함
클래스는 사용자 정의 자료형임
객체 지향 언어의 특징 중 추상화(abstraction), 캡슐화(encapsulation)이 적용되어야 함
Human 클래스 예시
public class Member {
// 필드
private String name;
private int age;
// 생성자
public Member() {}
// 메소드
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
인간에 대한 일반적인 속성, 기능들을 포함하고 있음 (== 추상화)
— | ————구분 | 동일 패키지 내 | 전체 | 설명 |
---|---|---|---|---|
+ | public | O | O | 누구나 쓸 수 있음 (공공의), 어디서든지 import할 수 있음 |
~ | (default) | O | 외부패키지에서 사용 못함 (접근 불가), 같은 패키지 내에서만 사용 가능 |
public class 클래스명 {
// .............
}
class 클래스명 {
// .............
}
: 객체의 속성을 작성하는 클래스 내부 영역
객체엔 (속성, 기능)이 있음
필드는 클래스에서 변수에 관련된 것(속성)을 작성하는 곳을 의미함
멤버 변수 (== 필드)
인스턴스 변수
필드에 작성된 일반 변수
new
연산자에 의해서 객체(인스턴스)가 생성될 때 메모리가 할당된다고 하여 인스턴스 변수라고 함
Heap 영역(동적 메모리)에 메모리가 할당 됨
객체가 생성될 때마다 생성됨
객체가 참조하는 변수가 없을 경우 사라짐
클래스 변수 (==
static
변수)
:static
으로 선언된 멤버변수로, 프로그램 실행 시 정적 메모리 영역에 자동 할당되고, 프로그램 종료 시 자동 소멸됨
필드에 static
예약어와 함께 작성된 변수
**static
영역에 메모리가 할당**되어 프로그램 종료 시 까지 유지됨
프로그램 실행 시 1회만 생성되는 변수
지역변수
메소드 또는 제어문 안에서 선언된 변수
Stack 영역에 할당되었다가, 메소드 종료 시 소멸 됨
[접근제한자] [예약어] class 클래스명 {
[접근제한자] [예약어] 자료형 변수명 [= 초기값];
}
public class Academy {
public int temp1;
protected int temp2;
int temp3; //접근제한자 생략 시 (default)
private int temp4; //캡슐화 원칙으로 private 사용
}
—— | ————구분 | 해당 클래스 내부 | 같은 패키지 내 | 후손 클래스 내 | 전체 |
---|---|---|---|---|---|
+ | public | O | O | O | O |
# | protected | O | O | O | |
~ | (default) | O | O | ||
- | private | O |
static: 공전이라는 뜻.
static
이라는 예약어를 보고 값을 얻어옴 (갖고 있는게 아님)
같은 타입의 여러 객체가 공유할 목적의 필드에 사용하며, 프로그램 시작시 정적 메모리(static) 영역에 자동 할당되는 멤버에 적용
public class Academy {
private static int temp1;
}
final
하나의 값만 계속 저장해야 하는 변수에 사용하는 예약어
public class Academy {
private final int TEMP1 = 100; // final 키워드가 붙은 필드명은
// 모두 대문자로 표기
private int temp4;
}