클래스(Class)란?
- 클래스는 객체를 생성하기 위한 설계도이다
- 자바에서 클래스는 객체의 상태를 나타내는 필드(변수)와 객체의 행동을 나타내는 메서드(함수)로 구성된다
- 클래스는 코드 영역에 위치하며, 이를 통해 다양한 객체를 생성하여 사용할 수 있다
객체(Object)란?
- 객체(Object)는 클래스의 설계도를 바탕으로 생성된 실체다
- 자바에서 객체는 힙(heap) 영역에 위치한다
- 객체는 클래스의 인스턴스로도 불린다
- ‘인스턴스’는 특정 클래스로부터 생성된 객체를 지칭하는 용어다.
필드(Field)
- 필드는 클래스에 포함된 변수를 의미
- 필드는 객체의 상태, 즉 데이터를 저장한다.
- 예를 들어,
Animal
클래스에는name
,age
와 같은 필드가 있을 수 있다.
필드의 종류
- 필드는 클래스에 포함된 변수다
- 필드/멤버/속성/변수 모두 동일한 의미로 사용된다.
- 선언된 위치와 선언자에 따라 크게 클래스 변수(static variable), 인스턴스 변수(instance variable), 지역 변수(local variable)로 구분된다
변수 | 생성 시기 | 소멸 시기 | 저장 메모리 |
---|---|---|---|
클래스 변수 | 클래스가 메모리에 올라갈 때 | 프로그램이 종료될 때 | 데이터 영역 |
인스턴스 변수 | 인스턴스가 생성될 때 | 인스턴스가 소멸할 때 | 힙 영역 |
지역 변수 | 블록 내에서 변수의 선언문이 실행될 때 | 블록을 벗어날 때 | 스택 영역 |
클래스 변수(Static Variable)
- 클래스 변수는
static
키워드를 사용해 선언하며, 모든 인스턴스가 공유하는 변수다 - 클래스가 메모리에 로드될 때 생성되고, 프로그램 종료 시 소멸한다
- 모든 인스턴스가 공유해야하는 값을 유지하기 위해 사용된다
- 인스턴스 생성 없이도 사용 가능하다
인스턴스 변수(Instance Variable)
- 인스턴스 변수는 각 인스턴스마다 별도로 존재하는 변수다
- 객체가 생성될 때마다 생성되고, 객체가 소멸할 때 소멸한다
- 각 인스턴스의 상태를 저장할 때 사용한다
지역 변수(Local Variable)
- 지역 변수는 메서드 내에서 선언되며, 메서드의 호출과 함께 생성되어 메서드가 종료되면 소멸한다
- 특정 메서드 내에서만 필요하며, 메서드 스코프를 벗어나면 필요없는 데이터를 위해 사용한다
메서드(Methods)
- 메서드는 클래스 내에 정의된 함수로, 클래스의 동작을 정의한다
- 객체의 동작을 정의하는 데 사용되며, 특정 작업을 수행하거나 값을 반환한다
- 메서드는 접근 제어자, 반환 타입, 메서드 이름, 구현부로 구성된다
- 메서드는 클래스 메서드와 인스턴스 메서드로 나뉜다
클래스 메서드(Static Method)
- 클래스 메서드는
static
키워드로 정의된다 - 클래스 메서드는 인스턴스 변수를 사용할 수 없으며, 클래스 이름으로 직접 호출할 수 있다
인스턴스 메서드(Instance Method)
- 인스턴스 메서드는
static
키워드 없이 정의된다 - 이 메서드는 인스턴스 변수와 인스턴스 메서드에 접근할 수 있다
생성자(Constructor)
- 생성자는 클래스의 인스턴스를 생성할 때 호출되는 특별한 메서드다
- 생성자는 메서드의 이름은 클래스 이름과 동일하며, 반환 타입이 없다
- 생성자는 인스턴스의 초기 상태를 설정하는 데 사용된다
- 자바에서는 생성자를 명시적으로 정의하지 않으면 기본 생성자를 자동으로 제공한다
- 기본 생성자는 아무 인자도 받지 않고, 아무것도 하지 않는 생성자다
접근제어자(Access Modifiers)란?
- 접근제어자는 클래스, 메서드, 필드에 대한 접근을 제한한다
자바에는
private
,default
,protected
,public
네 가지 접근제어자가 있다private
: 같은 클래스 내에서만 접근 가능default
: 같은 패키지 내에서만 접근 가능protected
: 같은 패키지 또는 다른 패키지의 자손 클래스에서 접근 가능public
: 어떤 클래스에서도 접근 가능
접근 제어자 | 같은 클래스의 멤버 | 같은 패키지의 멤버 | 자식 클래스의 멤버 | 그 외의 영역 |
---|---|---|---|---|
public | ○ | ○ | ○ | ○ |
protected | ○ | ○ | ○ | X |
default | ○ | ○ | X | X |
private | ○ | X | X | X |
정리
- 클래스(Class): 객체를 생성하기 위한 템플릿(설계도)
- 객체(Object): 클래스와
new
연산자를 통해 만들어진 실제 데이터가 담긴 변수 - 인스턴스(Instance): 클래스로부터 생성된 객체
- 클래스 필드/멤버/속성: 클래스 내의 변수
- 메서드(Method): 클래스 내의 함수
- 생성자(Constructor): 객체 생성 시 멤버 데이터의 초기화를 담당하는 특수 메서드
예시로 이해하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// 클래스 예시
public class Animal {
// 필드(멤버 변수) 선언
private String name; // 인스턴스 변수
private int age; // 인스턴스 변수
public static int count = 0; // 클래스 변수(static variable), 모든 인스턴스가 공유
// 생성자
public Animal(String name, int age) {
this.name = name;
this.age = age;
Animal.count++; // 클래스 변수 사용
}
// 인스턴스 메서드
public void displayInfo() {
System.out.println("Name: " + this.name + ", Age: " + this.age);
}
// 클래스 메서드(static method)
public static int getCount() {
return count; // 클래스 변수에 접근
}
// 메인 메서드, 프로그램의 진입점
public static void main(String[] args) {
Animal dog = new Animal("Buddy", 3); // 객체 생성
dog.displayInfo(); // 인스턴스 메서드 호출
System.out.println("Total Animals: " + Animal.getCount()); // 클래스 메서드 호출
}
}
- 클래스(Class) :
Animal
클래스는 객체를 생성하기 위한 템플릿으로, 이름과 나이를 가진 동물을 나타낸다 - 객체(Object)/인스턴스(Instance) :
new Animal("Buddy", 3)
을 통해 생성된dog
는Animal
클래스의 인스턴스(객체)다 - 필드(Field) :
name
,age
는 인스턴스 변수로 각 객체의 상태를 나타낸다.count
는 클래스 변수로 모든 인스턴스에 의해 공유된다. - 메서드(Method) :
displayInfo()
는 인스턴스 메서드로, 객체의 상태를 출력한다.getCount()
는 클래스 메서드로, 생성된 모든Animal
객체의 수를 반환한다. - 접근제어자(Access Modifiers) :
private
,public
,static
키워드는 클래스, 메서드, 필드에 대한 접근을 제한한다. 예를 들어,name
과age
필드는 클래스 내부에서만 접근 가능한private
접근 제어자를 사용한다.
Comments powered by Disqus.