JAVA/JAVA (IntelliJ)

[JAVA] : 생성자(Constructor) / Getter와 Setter

juunghee 2025. 2. 27. 00:28

 

 

목차

     

     

    자바에서 생성자, Getter, Setter는 객체 지향 프로그래밍에서 중요한 역할을 하며, 클래스의 속성을 정의하고 관리하는 데 사용됩니다. 이번 블로그에서는 생성자, Getter와 Setter가 무엇인지, 그리고 어떻게 사용하는지에 대해 알아보겠습니다.

    1. 생성자 (Constructor)

    생성자(Constructor)는 객체를 생성할 때 초기화 작업을 수행하는 특별한 메서드입니다. 생성자는 클래스 이름과 동일해야 하며, 객체가 생성될 때 자동으로 호출됩니다. 생성자는 주로 객체의 속성을 초기화하는 역할을 하며, 리턴 값이 없습니다.

    1.1 기본 생성자

    기본 생성자는 매개변수가 없는 생성자로, 클래스에 명시적으로 생성자가 정의되지 않으면 컴파일러가 자동으로 기본 생성자를 제공합니다. 기본 생성자는 객체를 생성할 때 아무런 인자 없이 초기화를 진행합니다.

    class Person {
        String name;
        int age;
    
        // 기본 생성자
        public Person() {
            name = "Unknown";
            age = 0;
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Person p1 = new Person();
            System.out.println(p1.name);  // 출력: Unknown
            System.out.println(p1.age);   // 출력: 0
        }
    }

     

     

    1.2 매개변수가 있는 생성자

    매개변수가 있는 생성자는 객체를 생성할 때 초기값을 제공할 수 있게 해줍니다. 이를 통해 객체 생성 시 속성을 초기화할 수 있습니다.

    class Person {
        String name;
        int age;
    
        // 매개변수가 있는 생성자
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Person p1 = new Person("홍길동", 25);
            System.out.println(p1.name);  // 출력: 홍길동
            System.out.println(p1.age);   // 출력: 25
        }
    }

     

     

    1.3 생성자 오버로딩 (Constructor Overloading)

    생성자 오버로딩은 여러 개의 생성자를 정의하는 방식입니다. 매개변수의 수나 타입이 다른 여러 생성자를 만들 수 있으며, 이를 통해 다양한 방식으로 객체를 초기화할 수 있습니다.

    class Person {
        String name;
        int age;
    
        // 매개변수가 없는 생성자
        public Person() {
            name = "Unknown";
            age = 0;
        }
    
        // 매개변수가 있는 생성자
        public 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("이순신", 30);
            
            System.out.println(p1.name);  // 출력: Unknown
            System.out.println(p1.age);   // 출력: 0
            System.out.println(p2.name);  // 출력: 이순신
            System.out.println(p2.age);   // 출력: 30
        }
    }

     

     

    2. Getter와 Setter

    GetterSetter는 객체의 **속성(필드)**에 접근하고 값을 설정하는 메서드입니다. 이 메서드는 **캡슐화(encapsulation)**의 중요한 요소로, 객체의 속성에 직접 접근하는 대신 간접적으로 접근하도록 하여 데이터의 무결성을 보호합니다.

    2.1 Getter

    Getter속성 값을 반환하는 메서드입니다. 속성 값을 외부에서 직접 수정하지 않고, 간접적으로 접근하도록 도와줍니다.

    class Person {
        private String name;  // private: 외부에서 직접 접근 불가
    
        // Getter 메서드
        public String getName() {
            return name;
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Person p1 = new Person();
            // name에 직접 접근하지 않고, getName() 메서드를 통해 값 조회
            System.out.println(p1.getName());  // 출력: null (초기화되지 않았으므로)
        }
    }

     

    2.2 Setter

    Setter속성 값을 설정하는 메서드입니다. 외부에서 객체의 속성 값을 변경할 수 있는 방법을 제공하지만, 이 값을 설정하기 전에 유효성 검증 등의 작업을 할 수 있습니다.

    class Person {
        private String name;
    
        // Setter 메서드
        public void setName(String name) {
            this.name = name;
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Person p1 = new Person();
            p1.setName("김유신");  // setName() 메서드를 통해 name 값 설정
            System.out.println(p1.getName());  // 출력: 김유신
        }
    }

     

    2.3 Getter/Setter 사용

    Getter와 Setter를 함께 사용하여 객체의 속성을 안전하게 관리할 수 있습니다. Getter는 값을 읽고, Setter는 값을 설정하며, 필요에 따라 유효성 검사데이터 처리를 추가할 수 있습니다.

    class Person {
        private String name;
        private int age;
    
        // Getter 메서드
        public String getName() {
            return name;
        }
    
        // Setter 메서드
        public void setName(String name) {
            this.name = name;
        }
    
        // Getter 메서드
        public int getAge() {
            return age;
        }
    
        // Setter 메서드
        public void setAge(int age) {
            if (age > 0) {  // 유효성 검사 추가
                this.age = age;
            }
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Person p1 = new Person();
            p1.setName("이순신");
            p1.setAge(40);
    
            System.out.println("이름: " + p1.getName());  // 출력: 이름: 이순신
            System.out.println("나이: " + p1.getAge());   // 출력: 나이: 40
        }
    }

     

    2.4 Getter/Setter의 장점

    1. 캡슐화: 객체의 속성을 외부에서 직접 수정하지 않게 하여, 데이터 보호가 가능합니다.
    2. 유효성 검증: Setter를 사용하여 값을 설정할 때 유효성 검사를 할 수 있습니다.
    3. 유지보수성: Getter와 Setter 메서드를 사용하면, 나중에 클래스의 필드를 변경할 때 외부 코드에 영향을 주지 않고 유연하게 수정할 수 있습니다.

    3. 결론

    생성자, Getter, Setter는 객체 지향 프로그래밍에서 매우 중요한 역할을 하며, 객체의 속성을 관리하는 데 핵심적인 기능을 합니다. 생성자를 통해 객체를 초기화하고, GetterSetter를 사용하여 객체의 속성에 안전하게 접근할 수 있습니다. 이들 개념을 잘 이해하고 활용하면, 캡슐화유지보수성을 높일 수 있으며, 효율적이고 안전한 객체 지향 프로그래밍을 구현할 수 있습니다.

    home