코딩항해기

[JAVA] 오버로딩 (Overloading), this, this() 본문

JAVA

[JAVA] 오버로딩 (Overloading), this, this()

miniBcake 2024. 7. 2. 14:00

 

 

오버로딩 (Overloading)

다형성 중 하나로,

오버로딩(메소드 오버로딩, 생성자 오버로딩),

오버라이딩(재정의), 참조변수의 다형성이 다형성에 속한다.

 

그 중 오늘은  Overloading과

생성자 오버라이딩 때 사용되는 this()까지 정리해보았다.

 

[요약]

메소드 오버로딩 매개변수의 순서, 개수, 타입이 다를 때 같은 이름의 메소드명으로 선언
생성자 오버로딩 매개변수의 타입, 개수, 순서가 다르면 같은 이름의 생성자로 선언

 

this 객체 자기자신을 의미한다.
this() 객체 자기자신의 생성자를 의미한다. (매개변수의 순서, 타입, 개수로 생성자 구분)

 

 

 

메소드 오버로딩 (Overloading)

 

매개변수의 순서, 개수, 타입이 다를 때 같은 이름의 메소드명으로 선언할 수 있다.

메서드 시그니처 중 반환타입은 오버로딩에 영향을 주지 않는다

 

메소드 오버로딩 시 주의할점

매개변수의 타입, 개수, 순서가 동일한 경우 매개변수의 이름이 동일하다고 해서 오버로딩이 아니다. (오류발생)

리턴타입만 다르고 매개변수가 동일한 경우 오버로딩이 아니다.

 

메소드 오버로딩이 가능한 이유

컴파일 할 때 메소드 이름 지정한 이름으로 저장되는 것이 아니라,

다른 방식으로 지정되어 전혀 다른 메서드로 인식하기 때문이다.

ex) public void test(int num) => abc

      public void test(int num, String name) => abcdff

 

메소드 호출

오버로딩 한 메소드는 매개변수의 값에 따라 자동 호출된다.

예를 들어 문자열 매개변수를 받는 메소드와 정수 매개변수를 받는 오버로딩 된 메소드가 있다면,

이를 호출할 때 매개변수 자리에 들어가는 값의 타입이 문자열인지, 정수인지에 따라 맞는 메소드가 자동 호출된다.

 

만약 매개변수의 타입이 일치하는 메소드가 없을 때,

전달받은 인수값보다 큰 타입을 가진 메소드가 있다면 해당 메소드가 호출된다.

//ex)
public void test(byte num){
	System.out.println(num);
}

public void test(long num){
	System.out.println(num);
}

int num = 10;
test(num); //public void test(long num) 호출

 

1. 매개변수의 개수로 메소드 호출 시, 전달한 인수값의 개수와 같은 메소드를 선택한다.

2. 매개변수의 타입으로 메소드 호출 시, 전달한 인수값의 타입과 같은 메소드를 선택한다.

3. 두 가지 다 만족하지 않는 경우 오류가 발생한다. 예외로 더 큰 타입을 가진 메소드가 있다면 해당 메소드가 호출된다.

 


생성자 오버로딩 this, this()

생성자

클래스 이름 뒤에 소괄호가 있는 형태로 리턴타입이 없는 메소드의 형태를 띄고있다.

생성자는 언제나 자기자신을 반환하기 때문에 따로 리턴타입을 작성하지 않는다.

주로 해당 클래스의 필드를 초기화 하는 목적으로 사용한다

 

클래스 선언 시 따로 생성자를 작성하지 않으면, 자바 컴파일러가 기본 생성자를 제공해준다.

이때 제공해주는 생성자는 매개변수가 없고, 필드값을 기본값(null, 0, 0.0 등)으로 초기화 시켜주는 생성자이다.

사용자가 직접 생성자를 선언하게 되면 자동 제공해주던 기본 생성자가 사라지게 되어,

계속 사용하고 싶다면 직접 선언해주어야 한다.

//기본 생성자
//생성자명과 클래스명은 동일하다.

public 생성자명(){ };

 

생성자 오버로딩

매개변수의 타입, 개수, 순서가 다르면 같은 이름의 생성자로 선언할 수 있다.

여러 방식으로 필드값을 초기화하는 생성자를 만들 수 있으며, 메소드 오버로딩과 동일하지만 this()를 사용할 수 있다는 점이 차이점이다.

 

this

현재 객체를 가리킨다. (객체 자기자신)

객체 내에서 this 키워드와 접근연산자(.)를 사용하면 현재 객체의 속성과 메소드에 접근할 수 있다.

주로 필드와 메소드의 매개변수를 구분 짓기 위해 this를 사용하며, 현재 객체의 필드(멤버변수)임을 명확히 할 수 있다.

 

this()

자기자신의 생성자를 의미한다.

생성자 내부에서만 사용이 가능하며 최상단에 작성해야한다.

현재 클래스가 가진 다른 생성자를 호출하는데 사용된다.

생성자 오버로딩을 할 때 중복되는 코드를 최소화 시킬 수 있다.

 

예를 들어 클래스 내에 여러 개의 생성자가 있는 경우,

각 생성자에서 공통적으로 수행해야하는 초기작업이 있다면, 이 작업을 다른 생성자 내에서 호출할 수 있다.

this()를 사용하여 다른 생성자를 호출할 때는 해당 생성자의 인수를 통해 구분되어 자동 호출된다.

'JAVA' 카테고리의 다른 글

[JAVA] 추상클래스, 추상메소드  (0) 2024.07.03
[JAVA] static, static 블록  (1) 2024.07.02
[JAVA] 클래스와 객체화  (0) 2024.07.02
[JAVA] 제어문 (조건문, 반복문, 기타제어문)  (0) 2024.06.26
[JAVA] 객체지향언어 특징  (0) 2024.06.23