JAVA 오버로딩과 생성자

박승현·2022년 3월 20일
0

JAVA

목록 보기
8/16

오버로딩

오버로딩은 매개변수의 개수와 타입은 다르지만 이름이 같은 메서드를 여러 개 정의 하는 것을 말한다. 일반적으로 메서드를 사용할 때는 메서드의 이름으로 구분해서 사용한다. 하지만 같은 기능을 하는 메서드가 매번 이름이 달라야 한다면 매우 비효율적일 것이다.
이러한 불편함을 해소하기 위해 오버로딩을 사용한다. 오버로딩을 사용하는 방법은 똑같은 이름의 메서드를 또 선언한다.

int sum(int a, int b) {
	return a + b;
}

int sum(int a, int b, int c) {
	return a + b + c;
}

이렇게 작성해놓으면 메서드가 호출될 때 파라미터의 개수와 타입에 따라 자동으로 알맞은 메서드가 호출된다.

public class Overloading {
	static int sum(int a, int b) {
		System.out.println("인자가 둘일 경우 호출됨");
		return a + b;
	}
	
	static int sum(int a, int b, int c) {
		System.out.println("인자가 셋일 경우 호출됨");
		return a + b + c;
	}
	
	static double sum(double a, double b, double c) {
		System.out.println("double 타입일 경우 호출됨");
		return a + b + c;
	}

	public static void main(String[] args) {
		System.out.println(sum(3, 2));
		System.out.println(sum(2, 3, 4));
		System.out.println(sum(2.5, 3.5, 4.5));
	}

}
/*
출력결과
인자가 둘일 경우 호출됨
5
인자가 셋일 경우 호출됨
9
double 타입일 경우 호출됨
10.5
*/

생성자(Constuctor)

생성자란 인스턴스를 생성할 때 호출되어 인스턴스 변수들을 초기화하는 일종의 메서드입니다. 생성자의 이름은 클래스의 이름과 같으며 생성자에는 리턴 값이 없다. 그러므로 반환타입도 붙여주지 않는다.

기본 생성자

클래스 이름(){}

기본적인 생성자의 구조이다. 모든 클래스에는 반드시 하나 이상의 생성자가 존재해야 한다. 그러나 지금까지 우리가 클래스를 작성할 때는 전혀 생성자를 신경 쓰지 않았다. 그 이유는 아무런 생성자도 정의되지 않을 경우 컴파일러가 자동으로 기본 생성자를 추가해주기 때문이다.

class Cellphone{
	String model;
    String color;
    int capacity;
    Cellphone(){} // 컴파일시 컴파일러가 자동으로 추가
}

컴파일러가 추가한 기본 생성자는 아무 내용도 없으므로 인스턴스에 아무런 영향을 주지 않는다. 만약 인스턴스가 생성될 때 필요한 작업이 있으면 기본 생성자 내부에 작성해주면 된다.

Cellphone(){
	/*
    필요한 작업
    */
}

매개변수를 갖고 있는 생성자

Cellphone(String color, int capacity) {
	this.color = color;
    this.capacity = capacity;
}

매개변수가 있는 생성자가 작성되면 기본 생성자는 무시된다. 인스턴스를 생성할 때 알맞은 파라미터로 호출하면 이 생성자를 통해 인스턴스가 생성된다. 만약 기본 생성자를 통한 작업이 필요하다면 사용자가 직접 작성해서 사용할 수도 있다.

Cellphone() {
	this.color = 'black';
    this.capacity = 32;
// 매개변수를 갖는 생성자를 활용한 예시코드
class Cellphone {
	String model = "Galaxy 8";
	String color;
	int capacity;
	
	Cellphone(String color, int capacity) {
		this.color = color;
		this.capacity = capacity;
	}
}

public class Constructor1 {

	public static void main(String[] args) {
		
		Cellphone myPhone = new Cellphone("silver", 64);
		
		System.out.println(myPhone.model);
		System.out.println(myPhone.color);
		System.out.println(myPhone.capacity);
	}

}
/*
출력결과
Galaxy 8
Silver
64
*/
profile
그냥 해보자 안되더라도 해보자 끝까지 해보자

0개의 댓글

관련 채용 정보