객체의 특성(속성, 기능)에 대한 정의를 한 것
→ 보통 클래스를 설계도에 비유함
클래스는 사용자 정의 자료형임
객체 지향 언어의 특징 중 추상화(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;
}
