개발(React | Java)/자바 기초 | 문법

생성자(Constructor), this, 접근제어자 — 객체지향의 핵심 개념 정리

dev-parrot 2025. 12. 7. 15:46

객체를 만들 때 가장 먼저 호출되는 것이 **생성자(Constructor)**입니다.
또한 객체 내부 값을 다룰 때 필수로 사용되는 키워드가 this,
정보 은닉을 위해 꼭 필요한 것이 **접근제어자(private, public)**입니다.

이번 글은 Java OOP(객체지향)의 기반을 다지는 매우 중요한 내용들로 구성되어 있습니다.


📌 목차

  1. 생성자(Constructor)란?
  2. 기본 생성자
  3. 매개변수 있는 생성자
  4. this 키워드
  5. 접근제어자(private, public)
  6. Getter / Setter 개념
  7. 실전 클래스 예제
  8. 자주 하는 실수
  9. 마무리
  10. 대표 태그

1️⃣ 생성자(Constructor)란?

생성자는 객체가 생성될 때 자동으로 호출되는 메서드입니다.

특징:

  • 이름이 클래스명과 동일
  • 반환타입 없음(void조차 없음)
  • 객체 생성과 동시에 실행되는 초기 설정 담당

✔ 생성자 예제

public class Person {
    String name;
    int age;

    public Person() { // 생성자
        System.out.println("Person 객체 생성됨");
    }
}

2️⃣ 기본 생성자 (Default Constructor)

클래스에 생성자를 작성하지 않으면,
Java가 자동으로 기본 생성자를 만들어줍니다.

public Person() { }

 

3️⃣ 매개변수 있는 생성자

객체 생성 시 값을 자동으로 설정하고 싶을 때 사용합니다.

 

public class Person {
    String name;
    int age;

    public Person(String name, int age) {  
        this.name = name;
        this.age = age;
    }
}

 

사용:

 

Person p = new Person("Tom", 20);

 

 

4️⃣ this 키워드 (매우 중요)

this는 현재 객체 자기 자신을 의미하는 키워드입니다.

보통 매개변수 이름과 필드 이름이 같을 때 구분하기 위해 사용합니다.

public Person(String name, int age) {
    this.name = name; // 필드 = 매개변수
    this.age = age;
}

 

✔ this의 또 다른 용도

생성자에서 다른 생성자를 호출 가능:

✔ this의 또 다른 용도

생성자에서 다른 생성자를 호출 가능:

 

5️⃣ 접근제어자(Access Modifier)

접근 범위를 지정하는 키워드입니다.

제어자 의미
private 클래스 내부에서만 접근 가능
default 같은 패키지에서 접근 가능 (키워드 없음)
protected 같은 패키지 + 상속 관계
public 어디서나 사용 가능

실무에서는 대부분 필드는 private,
메서드는 public으로 구성합니다.

이유: 정보 은닉 → 객체의 무결성 유지


6️⃣ Getter / Setter

private 필드를 외부에서 읽거나 수정하기 위해 사용합니다.

public class Person {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 

7️⃣ 실전 예제 — 생성자 + this + 접근제어자

public class Car {
    private String model;
    private int speed;

    // 매개변수 있는 생성자
    public Car(String model, int speed) {
        this.model = model;
        this.speed = speed;
    }

    // Getter
    public String getModel() {
        return model;
    }

    // Setter
    public void setSpeed(int speed) {
        this.speed = speed;
    }

    public void drive() {
        System.out.println(model + " 속도: " + speed);
    }
}

사용:

Car c = new Car("Hyundai", 120);
c.drive();

c.setSpeed(150);
c.drive();

 

8️⃣ 자주 하는 실수

❌ 생성자 이름을 다르게 작성

생성자 이름은 반드시 클래스명과 동일해야 함.

❌ 생성자에서 return 사용

생성자는 값을 반환하지 않음.

❌ private 필드를 직접 접근하려는 경우

Car c = new Car("A", 100);
c.speed = 50; // 오류!

 

Setter를 사용해야 함.

❌ “this”를 잘못 이해

this.name = name;에서
= 왼쪽: 필드 / 오른쪽: 매개변수


9️⃣ 마무리

이번 글로 Java 객체지향의 핵심 요소들을 완전히 이해할 수 있습니다.

✔ 생성자
✔ 매개변수 생성자
✔ this 키워드
✔ 접근제어자(private/public)
✔ Getter / Setter
✔ 정보 은닉 개념

다음 단계는 객체지향의 꽃인 **상속(Inheritance)과 다형성(Polymorphism)**입니다.

 

📘 다음 글 예고

👉 Java 기초 (10) — 상속, 오버라이딩, 오버로딩 완전 정리