• [JAVA/자바] 생성자 개념 정리

    2023. 5. 15.

    by. 개발도비

    생성자의 개념과 목적

     

    생성자(constructor는 객체가 생성될 때 객체의 초기화를 위해 실행되는 메소드이고 모든 객체지향 언어에 존재한다.

    public class Circle {
        int radius; //원의 반지름 필드
        String name; //원의 이름 필드
    
        //생성자 이름은 클래스 이름과 동일하다
        public Circle() { //매개변수 없는 생성자
            radius = 1; name = ""; //필드 초기화
        }
        /*
        객체가 생성될 때 필드를 초기화하거나 생성 당시에 꼭 필요한 작업을 위해 두는 것이 생성자
         */
    
        //생성자는 리턴 타입이 없다
        public Circle(int r, String n){ //매개변수를 가진 생성자
            radius = r; name = n; //매개변수로 필드를 초기화. 생성자는 radius와 name 필드 초기화
        }
    
        public Circle(int radius){
            this.radius = radius;
        }
    
    
        public double getArea(){ //원의 면적 계산 메소드
            return 3.14 * radius * radius;
        }
    
        public static void main(String[] args) {
    
            Circle pizza = new Circle(10,"치즈피자"); //객체 생성. 반지름을 10으로, 이름을 "치즈피자"로 초기화
    
            double area = pizza.getArea(); //피자의 면적 알아내기
            System.out.println(pizza.name + "의 면적은 " + area);
    
            Circle donut = new Circle(); //객체 생성. 반지름을 1, 이름을 ""로 초기화
            donut.name = "자바도넛"; //이름 변경
            area = donut.getArea();
            System.out.println(donut.name + "의 면적은 " + area);
        }
    }

     

    - 생성자는 객체가 생성되는 순간에 자동으로 호출되는 메소드로서, 객체에 필요한 초기화를 실행하는 코드를 담아야 한다.

     

    - 생성자의 이름은 클래스의 이름과 동일하게 작성해야 한다

     

    - 생성자는 오버로딩하여 여러 개 작성할 수 있다. 

    : 매개변수의 개수와 타입만 다르다면 클래스 내에 생성자를 여러 개 둘 수 있다. 

    public class Circle{
     	public Circle() { ... } //매개변수 없는 생성자
     	public Circle(int r, String n) {...} //2개의 매개변수를 가진 생성자
     }

     

    - 객체 생성은 반드시 new를 통해서만 이루어지며, 생성자는 이 떄 자동으로 한 번만 호출된다

    Circle pizza = new Circle(10, "치즈피자");  //생성자 Circle(int r, String n) 호출 
    Circle donut = new Circle(); //생성자 Circle() 호출

     

    - 생성자는 어떤 값도 리턴하지 않기 때문에 리턴타입을 선언할 수 없다. 리턴 값이 없다고 해서 void를 리턴 타입으로 사용할 수도 없다. 하지만 생성자에서 return문을 사용할 수 없다는 뜻은 아니다. return문은 메소드의 실행을 끝내고 호출한 곳으로 돌아가라는 명령이기 때문에 생성자의 실행을 끝내고 싶으면 생성자 코드 내 어디서든 리턴문을 사용해도 된다. 

     

    - 생성자의 목적은 객체가 생성될 때 필요한 초기작업을 위함이다. 위에서 예시로 든 객체생성문 Circle pizza = new Circle(10, "치즈피자"); 는 Circle(int r, String n) 생성자를 호출하여 pizza 객체의 radius를 10으로 name을 "치즈피자"로 초기화한다. 

     

    이렇게 생성자는 객체가 생성될 때, 필드 초기화, 필요한 메모리 확보, 파일 열기, 네트워크 연결 등 객체가 활동하기 전에 필요한 초기 준비를 하는데 이용된다.

     


    기본 생성자

     

    - 기본 생성자(default constructor)란 매개변수와 실행 코드가 없어 아무 일도 하지 않고 단순 리턴하는 생성자이다. 디폴트 생성자라고도 부른다 

    class Circle {
    	public Circle(){ } //기본 생성자. 매개변수가 없고 아무 일 없이 단순 리턴
    }

    객체가 생성될 때 반드시 생성자가 실행되기 때문에 생성자가 없는 클래스는 없다. 생성자가 하나도 없는 경우엔 컴파일러가 기본 생성자를 자동으로 생성하여 삽입한다. 컴파일러에 의해 자동삽입된 기본 생성자는 사용자의 눈에 보이지 않는다.

     

    생성자가 하나라도 존재하는 클래스에는 컴파일러가 기본 생성자를 삽입해주지 않는다. 이는 클래스를 만든 개발자의 의도를 지켜주기 위함이다. 예를 들어 위의 Circle 클래스에 Circle(int r) 생성자가 있고, 객체를 생성할 때 new Circle(10)과 같이 반드시 반지름 값으로 초기화하도록 강제하고 있다면, 이것은 반지름 값 없이 new Circle()로 객체를 생성하지 말라는 개발자의 의도이다. 자바 컴파일러는 클래스의 의도를 훼손하지 않기 위해 기본 생성자를 자동으로 생성해주지 않는다. 

    'Programming > JAVA' 카테고리의 다른 글

    [JAVA/자바] ProcessHandle  (0) 2023.06.04
    [JAVA/자바] this 레퍼런스  (0) 2023.05.16
    $("[name=auth_ip]").val()  (0) 2022.12.01
    Modal  (0) 2022.07.18
    [JAVA] int와 Integer의 차이점  (0) 2022.04.04

    댓글