BE/Java

[Java] 생성자와 오버로딩, getter setter

baek-dev 2024. 12. 1. 15:40

1. 생성자 (Constructor)

정의

  • 생성자는 클래스가 객체로 생성될때 호출되는 특별한 메서드
  • 클래스의 이름과 동일, 반환타입이 없음(`void`도 명시하지 않음)

역할

  • 객체 초기화를 주로 담당
  • 기본 생성자와 사용자 정의 생성자가 있다

기본 생성자

  • 생성자를 작성하지 않으면 컴파일러가 자동으로 추가한다
  • 매개변수가 없고 아무 작업도 하지 않는다
class Person {
    String name;
    int age;
}

public class Main {
    public static void main(String[] args) {
        Person p = new Person();  // 기본 생성자가 호출됨
        System.out.println(p.name);  // null
        System.out.println(p.age);   // 0
    }
}

 

사용자 정의 생성자

  • 객체 생성시 특정 값을 초기화 할 수 있다
class Person {
    String name;
    int age;

    // 사용자 정의 생성자
    Person(String name, int age) {
        this.name = name;  // this는 현재 객체를 가리킴
        this.age = age;
    }
}

public class Main {
    public static void main(String[] args) {
        Person p = new Person("Alice", 25);  // 사용자 정의 생성자 호출
        System.out.println(p.name);  // Alice
        System.out.println(p.age);   // 25
    }
}

2. 생성자 오버로딩

정의

  • 같은 이름의 생성자를 다른 매개변수 리스트로 여러개 정의하는것
  • 객체 생성시 입력값에 따라 적합한 생성자가 호출된다
class Person {
    String name;
    int age;

    // 기본 생성자
    Person() {
        this.name = "Unknown";
        this.age = 0;
    }

    // 매개변수 하나인 생성자 (오버로딩)
    Person(String name) {
        this.name = name;
        this.age = 0;
    }

    // 매개변수 두 개인 생성자 (오버로딩)
    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

public class Main {
    public static void main(String[] args) {
        Person p1 = new Person();  // 기본 생성자 호출
        Person p2 = new Person("Alice");  // 매개변수 하나인 생성자 호출
        Person p3 = new Person("Bob", 30);  // 매개변수 두 개인 생성자 호출

        System.out.println(p1.name + ", " + p1.age);  // Unknown, 0
        System.out.println(p2.name + ", " + p2.age);  // Alice, 0
        System.out.println(p3.name + ", " + p3.age);  // Bob, 30
    }
}

3. Getter, Setter

정의

  • Getter : 객체의 필드값을 반환하는 메서드
  • Setter : 객체의 필드값을 설정하는 메서드

역할

  • 클래스의 멤버 변수를 캡슐화하여 직접 접근을 제한하고 안전하게 값을 가져오거나 설정하도록 함

멤버변수를 `private`로 선언하고, 외부에서 접근할수 있도록 `public` Getter, Setter를 제공

class Person {
    private String name;  // private 멤버 변수
    private int age;

    // Getter for name
    public String getName() {
        return name;
    }

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

    // Getter for age
    public int getAge() {
        return age;
    }

    // Setter for age
    public void setAge(int age) {
        if (age >= 0) {  // 유효성 검사
            this.age = age;
        } else {
            System.out.println("나이는 0 이상이어야 합니다.");
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Person p = new Person();

        // Setter 사용
        p.setName("Alice");
        p.setAge(25);

        // Getter 사용
        System.out.println(p.getName());  // Alice
        System.out.println(p.getAge());   // 25
    }
}

 

장점

  • 데이터 보호 : 필드에서 직접 접근하지 못하도록 막음
  • 유효성 검사 : 값을 설정하기 전에 조건 검사를 할수 있음
  • 코드 유짓보수성 증가 : 필드가 변경되어도 Getter/Setter를 통해 안정적으로 접근 가능

요약

  • 생성자
    • 객체 생성시 호출되며 객체의 초기 상태를 설정
    • 기본 생성자와 사용자 정의 생성자, 오버로딩 지원
  • 오버로딩
    • 같은 이름의 메서드(또는 생성자)를 다양한 매개변수 리스트로 제공하여 유연성을 제공
  • Getter와 Setter
    • 멤버 변수에 간접적으로 접근하여 데이터를 읽거나 수정
    • 캡슐화를 통해 데이터 보호와 유효성 검사를 가능하게 함

 

 

 

 

출처 : ChatGPT

'BE > Java' 카테고리의 다른 글

[Java] 반복문  (0) 2024.12.01
[Java] 조건문  (0) 2024.12.01
[Java] 캐스팅 (형 변환)  (0) 2024.12.01
[Java] abstract와 interface  (0) 2024.11.30
[Java] 접근 제어자  (0) 2024.11.30