dev.syw

필드와 메서드, 생성자, 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 멤버는 클래스에 속해 모든 객체가 공유합니다.

연습문제

  1. 이름과 가격 필드를 가진 Product 클래스를 만들고 생성자로 초기화하세요.
  2. Product에 정보를 출력하는 메서드를 추가하세요.
  3. balance 필드를 private으로 두고 입금/출금 메서드를 가진 Account를 만드세요(잔액 부족 시 출금 거부).
  4. 생성될 때마다 개수를 세는 static 카운터를 가진 클래스를 만드세요.

힌트 — 출금은 잔액이 충분한지 먼저 검사합니다.

💡 연습문제 풀이

불러오는 중…

함께 보면 좋은 자료

댓글 0

Java” 강좌에 대한 댓글입니다.

댓글을 작성하려면 로그인이 필요합니다.