본문 바로가기
Java

[JAVA/자바]초기화와 중복정의(Overloading)

by hans-j 2022. 12. 14.

 생성자는

  • 인스턴스 생성시 (객체가 생성될 때 마다) 초기화 해주는 메서드
  • 자바의 모든 클래스에는 하나 이상의 생성자가 정의되야한다.
  • 클래스이름과 동일한 메서드
  • 메서드의 return type/리턴타입이 없다.
  • 생성자를 명시 안한다면 default 로 설정이 되는데 이렇게 설정된 것을 초기화라고 한다.
  • default 생성자는 생성자를 정의하지 않았을 경우에만 호출되어 진다.
  • default 생성자의 접근 지시자(public, private...)는 class의 선언형태에 따라 결정된다.
public BookVO{
	} //생성자가 생략된 클래스

 

public class Book{
	private String title;
    private int price;
    private String company;
    private int page;
    
    public BookVO(){ 
    	super() // default constructor(기본생성자)는 이렇게 생겼다.
    }
}

**위에 설명한 것 처럼 클래스 이름과 동일한 메서드 **


중복정의를 하는 방법은 아래의 두 방법과 같다.

package kr.tpc;
// 책(Object)->제목, 가격, 출판사, 페이지 수......
public class BookVO {
   public String title;
   public int price;
   public String company;
   public int page;
   //  디폴트생성자 메서드(생략)--------------------------방법1
   public BookVO() {
	   // 초기화 작업
	   this.title="자바";
	   this.price=14000;
	   this.company="이지스";
	   this.page=780;
   }
   // 생성자 메서드의 중복정의(overloading)-------------------------방법2
   public BookVO(String title,int price,String company, int page) {
	   this.title=title;
	   this.price=price;
	   this.company=company;
	   this.page=page;	   
   }
}

둘 중에 하나로 사용하면 됨ㅋ

이렇게 중복정의를 할 때 this 를 사용함. 왜냐하면!!

위에 보다시피 BookVO라는 이름이 같은 클래스가 두 개나 있다.

객체지향에서는 메소드이름이 같아도 에러가 안난다.

하지만 매개변수의 개수 혹은 타입 둘 중 하나가 달라야한다. 그럼 서로 다른 메소드로 받아들인다.


위의 클래스를 보면


하나는

	public BookVO() {
	   this.title="자바";
	   this.price=14000;
	   this.company="이지스";
	   this.page=780;
   }

또 하나는 아래와 같이 매개변수 부분이 다르다. 그래서 가능함!

	public BookVO(String title,int price,String company, int page) {
	   this.title=title;
	   this.price=price;
	   this.company=company;
	   this.page=page;	   
   }
}

** this 키워드(인스턴트 자신을 가리키는 참조변수)는
자기 자신의 멤버 변수에 접근할 수 있다는 의미 + 가독성을 위해서 사용한다. **


 

import kr.tpc.BookVO;

public class TPC12 {
	public static void main(String[] args) {
      // 생성자 -> »생성+초기화-> 중복정의
	  BookVO b1=new BookVO();
	  //b1.title="자바;
	  System.out.print(b1.title+"\t");
	  System.out.print(b1.price+"\t");
	  System.out.print(b1.company+"\t");
	  System.out.println(b1.page);
	  
	  BookVO b2=new BookVO();
	  System.out.print(b2.title+"\t");
	  System.out.print(b2.price+"\t");
	  System.out.print(b2.company+"\t");
	  System.out.println(b2.page);
	  
	  BookVO b3=new BookVO("Python", 18000, "데탑", 920);
	  System.out.print(b3.title+"\t");
	  System.out.print(b3.price+"\t");
	  System.out.print(b3.company+"\t");
	  System.out.println(b3.page);
	  
	}
}

위의 메인 클래스의 출력값은 아래와 같다.

자바    14000    이지스    780 
자바    14000    이지스    780 
python  18000     데탑     920

이유는!     

BookVO b1=new BookVO();
BookVO b2=new BookVO();

b1, b2는 초기화 한 메모리에 부모클래스에서 명시적으로 저장해준 값들이 들어가고


b3는  중복정의(Overloading)을 해주었기때문에 해당 값이 나온다.

BookVO b3=new BookVO("Python", 18000, "데탑", 920);

 


공부할 때 도움 많이 된 블로그!!

https://cow-kite24.tistory.com/6

 

[Java] 생성자, 디폴트 생성자, 매개변수 생성자, 생성자 오버로딩 / 2021.07.26

1. 생성자란? 클래스의 변수들은 메서드에 의해 값이 변경될 수 도 있지만, 생성자를 사용하여 초기화시켜줄 수도 있다. 생성자는 인스턴스를 만들고, 인스턴스의 변수들을 초기화시켜주는 역할

cow-kite24.tistory.com


**인프런 강의 'Java TPC(생각하고, 표현하고, 코딩하고 / 박매일 강사님)'를 듣고 작성 및 발췌 했습니다.