[Java] 자바의 메소드 및 생성자 오버로딩(Overloading)


♦ 자바의 메소드 및 생성자 오버로딩(Overloading)
기본적으로 하나의 클래스 안에서 사용되는 모든 식별자는 이름이 중복되면 안된다.

변수의 이름은 블록 {} 이 서로 다르면 중복이 가능하다.

동일 이름 변수와 블록 {} 의 관계

public class Test01 {
	public static void main(String[] args) {

		int num = 10;
		// int num=20; // 에러

		System.out.println(num);
	}

	public void test() {

		int num = 10;

		System.out.println(num);
	}

}

 

메소드와 생성자는 같은 클래스 내에서 같은 이름으로 여러번 사용될 수 있다. 변수와 다르게 메소드와 생성자는 이름이 동일하더라도 인자 리스트만 다르면 식별할 수 있기 때문이다. 이를 객체지향에서는 오버로딩 기법이라고 한다. 서로 다른 이름으로 된 메소드를 관리하기 보다는 동일 이름으로 관리하느 것이 재사용성 등 여러 가지 장점이 있다.

메소드 오버로딩

public class Test01 {
	
	public void sum(){}
	public void sum( int a ){}
	//public void sum( int a ){} // 동일 이름 메소드가 인자까지 같으면 에러발생
	public void sum( String n ){}
	public void sum(int a , String n ){}
	public void sum(String n , int a ){}
	public void sum(int a , int b, String n  ){}
	
}

 

생성자 오버로딩

public class Test01 {
	
	public Test01(){}
	public Test01( int a ){}
	public Test01( String n ){}
	public Test01(int a , String n ){}
	
}

 

this 키워드
this 는 객체생성 후에 메모리에 생성된 자기 자신의 인스턴스를 의미한다.

일반적으로 다음 2가지 경우에 사용된다.

1. 인스턴스 변수와 로컬 변수명이 동일한 경우
형식 : this.인스턴스변수명

public class Student {

	private String name;

	private int age;

	public void setName(String name) {
		this.name = name;
	}

	public void setAge(int age) {
		this.age = age;
	}

}

 

2. 생성자에서 다른 오버로딩 생성자를 호출하는 경우
형식 : this([값])

반드시 생성자 첫번째 라인에서 사용해야 하며 인자 리스트가 일치해야 한다.
용도는 여러 생서자에서 인스턴스 변수를 중복으로 초기화하지 않고 하나의 생성자에서만 초기화 하기 위함이다.

public class Student {

	private String name;

	private int age;

	public Student(String name) {
		this(name, 19);
	}

	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	}

}

 

답글 남기기