♦ 자바의 메소드 및 생성자 오버로딩(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; } }