[Java] 생성자

이지원·2024년 5월 9일

Java Study

목록 보기
4/9

생성자란?

생성자는 객체를 생성할 때 호출되는 특별한 종류의 메서드이다. 예시를 들어 설명하면

Car car = new Car();

Car의 클래스가 있다고 가정하자. car 변수를 Car 타입으로 선언 후 new 키워드를 통해 힙 메모리 영역에 새로운 객체에 필요한 메모리를 할당한다. 이 후에 객체를 초기화를 수행하는데 필요한 메서드를 호출하는데 이 메서드가 생성자이다.

클래스를 작성하면서 생성자를 작성하지 않았던 적이 있었을 것이다. 이는 자바에서 생성자를 따로 작성하지 않으면 생성자를 자동으로 생성해주기 때문이다.

생성자의 작성 방법에 대해서 알아보겠다.

  • 기본 생성자
    기본 생성자는 생성자 메서드에서 매개변수를 받지 않고 초기화하는 메서드로 클래스의 이름과 기본 생성자 메서드의 이름은 같아야 한다. 아래에는 기본 생성자 작성 예시이다.

    Class Car {
    	private count;
      
        Car() {
      		System.out.println("기본 생성자 생성");
        }
    }
  • 생성자
    기본생성자와 달리 매개변수를 가지고 객체를 생성할 때 초기화하고 싶을 때는 어떻게 할까?
    기본생성자와 많이 다르지 않지만 사용하는데 있어서 주의할 것이 있다. 먼저 예시를 들고 이를 설명하겠다.

Case1)

Class Car {
	private count;
    
    Car (int count) {
    	this.count = count;
    }
}    

Case2)

Class Car {
	private count;
    
	Car(int count) {
    	count = count;
    }
}
  • 주의할 점
    만약 위의 코드에서 생성자 초기화 부분에서 Case 2와 같이 하게 되면 어떻게 될까? 이는 우리의 의도와 다르게 count는 모두 우선순위가 빠른 매개변수 count로 인식되어 클래스의 맴버변수의 초기화는 이루어지지 않는다. 따라서 이 때 맴버변수로 지정해주는 키워드가 필요한데 이 키워드가 바로 위에서 사용한 this 이다. 다시 정리하면 this 키워드는 자기 자신의 클래스의 맴버변수를 가리키는 키워드이다.

  • 생성자의 오버로딩
    그럼 생성자의 매개변수의 타입과 개수를 다르게 해줘서 객체 생성시 초기화를 다양하게 할 수 없을까? 당연히 가능하다. 이는 오버로딩을 이용하면 되는데 오버로딩에 대해 짧게 설명하면 같은 메서드를 매개변수를 다르게 해서 다양하게 사용할 수 있게 하는 방법인데 아래는 예시이다.

    Class Book {
    	private String name;
      	private String author;
      	privaet int isbn; 
      
        Book(String name, String author, int isbn) {
      		this.name = name;
        	this.author = author;
        	this.isbn = isbn;
      	}
      
      	Book(String name, String author) {
      		this.name = name;
        	this.author = author;
        	isbn = 0;
      	}
    }
    
  • this() 사용법과 예시
    위에서 Book 생성자 메서드를 보면 중복이 약간 불편하다고 생각할 수 있다. 따라서 이를 this() 메서드를 통해 중복을 피할 수 있다. this() 기능은 생성자 내부에서 자신의 생성자를 호출할 수 있게 해주는 메서드이다. this() 사용 주의점은 생성자 메서드 내부에서만 사용가능하며 생성자 메서드 맨 첫줄(앞)에 와야 한다는 점이다.

    Class Book {
    	private String name;
      	private String author;
      	private int isbn;
          
      	Book(String name, String author, int isbn) {
          	this.name = name;
           	this.author = author;
            this.isbn = isbn;
        }
        
        Book(String name, String author) {
          	this(name, author, 0)
        }
profile
백엔드 개발자취

0개의 댓글