필드와 메서드, 생성자, this, 캡슐화와 접근제어자, static을 다룬다.
클래스와 객체
객체 지향 프로그래밍에서 클래스는 설계도이고, 객체는 그 설계도로 만든 실체입니다. 데이터(필드)와 그 데이터를 다루는 동작(메서드)을 하나로 묶어 다루는 것이 클래스의 핵심입니다.
학습 목표
- 클래스에 필드와 메서드를 정의하고 객체를 생성한다.
- 생성자와
this의 역할을 이해한다. - 캡슐화를 위해 getter/setter와 접근제어자를 사용한다.
static멤버의 의미를 안다.
클래스와 필드, 메서드
클래스 안에는 상태를 나타내는 필드와 동작을 나타내는 메서드를 둡니다.
public class Dog {
String name; // 필드
int age;
void bark() { // 메서드
System.out.println(name + ": 멍멍!");
}
}
객체는 new 키워드로 만듭니다.
Dog dog = new Dog();
dog.name = "바둑이";
dog.age = 3;
dog.bark(); // 바둑이: 멍멍!
생성자와 this
생성자는 객체가 만들어질 때 호출되어 초기값을 설정합니다. 클래스 이름과 같고 반환타입이 없습니다. this는 현재 객체 자신을 가리킵니다.
public class Dog {
String name;
int age;
Dog(String name, int age) {
this.name = name; // this.name은 필드, name은 매개변수
this.age = age;
}
}
Dog dog = new Dog("바둑이", 3);
💡 TIP — 매개변수 이름과 필드 이름이 같을 때
this.를 붙여 필드를 명확히 구분합니다. 생성자나 setter에서 자주 쓰는 패턴입니다.
캡슐화와 접근제어자
필드를 외부에서 마음대로 바꾸지 못하게 막고, 정해진 메서드로만 접근하게 하는 것을 캡슐화라고 합니다. 접근제어자로 공개 범위를 정합니다.
| 접근제어자 | 접근 가능 범위 |
|---|---|
public | 어디서나 |
protected | 같은 패키지 + 자식 클래스 |
| (없음) | 같은 패키지 |
private | 같은 클래스 안에서만 |
public class Account {
private int balance; // 외부에서 직접 접근 불가
public int getBalance() { // getter
return balance;
}
public void deposit(int amount) { // 검증 후 변경
if (amount > 0) {
balance += amount;
}
}
}
⚠️ 주의 — 필드를
public으로 열어 두면 누구나 검증 없이 값을 바꿀 수 있어 위험합니다. 필드는private으로 두고 메서드로 제어하는 것이 기본입니다.
getter와 setter
private 필드를 읽고 쓰는 공개 메서드입니다. setter에서 유효성 검사를 넣을 수 있습니다.
public class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
if (name != null && !name.isBlank()) {
this.name = name;
}
}
}
static 멤버
static 필드와 메서드는 객체가 아니라 클래스에 속합니다. 모든 객체가 공유하며 객체 없이 호출됩니다.
public class Counter {
static int count = 0; // 모든 객체가 공유
Counter() {
count++;
}
}
new Counter();
new Counter();
System.out.println(Counter.count); // 2
요약
- 클래스는 필드(상태)와 메서드(동작)를 묶은 설계도이고, 객체는
new로 생성합니다. - 생성자는 객체 생성 시 초기화를 담당하며
this는 자기 자신을 가리킵니다. - 캡슐화는 필드를
private으로 감추고 메서드로 접근하게 합니다. - 접근제어자로 공개 범위를 조절합니다.
static멤버는 클래스에 속해 모든 객체가 공유합니다.
연습문제
- 이름과 가격 필드를 가진
Product클래스를 만들고 생성자로 초기화하세요. Product에 정보를 출력하는 메서드를 추가하세요.balance필드를private으로 두고 입금/출금 메서드를 가진Account를 만드세요(잔액 부족 시 출금 거부).- 생성될 때마다 개수를 세는
static카운터를 가진 클래스를 만드세요.
힌트 — 출금은 잔액이 충분한지 먼저 검사합니다.
💡 연습문제 풀이
불러오는 중…
댓글 0
“Java” 강좌에 대한 댓글입니다.