메소드 오버로딩
– 동일한 이름의 메소드를 둘 이상 동시에 정의하는 것
– 매개변수의 개수 또는 자료형이 다르면 오버로딩이 가능하다
– 호출시 매개변수에 따라 구분된다.
생성자와 오버로딩
– 생성자도 오버로딩이 가능하다.
– this 키워드를 사용하여 생성자 내에서 다른생성자의 호출이 가능하다.
public class Test { Test(String str, int i){ System.out.println(str); } Test(String str){ this(str, 1); // this 키워드를 사용하여 생성자 내에서 다른 생성자를 호출 } void aaa() { System.out.println("aaa"); } void aaa(int a) { System.out.println(a); } void aaa(double a) { System.out.println(a); } void aaa(String a) { System.out.println(a); } public static void main(String[] args) { Test test = new Test("생성자 호출"); test.aaa(); test.aaa(1); test.aaa(1.0); test.aaa("문자"); } }
String 클래스
– 자바의 문자열은 큰따옴표로 묶어서 String 이라는 이름의 클래스로 표현한다.
– 자바는 동일한 문자열인경우 하나의 인스턴스를 공유한다.
– 동일한 문자열로 새로운 인스턴스를 생성하려면 아래와 같이 new 키워드를 사용한다.
String str = new String(“문자열”);
– 문자열 + 연산은 내부적으로 concat() 메소드 호출문으로 대체된다.
– 두번이상 + 연산이 사용된다면 StringBuilder 클래스가 사용된다.
이경우 아무리 많은 문자열을 더해도 생성되는 인스턴스의 수는 두 개 이다.(인스턴스의 참조값을 반환하는 this키워드가 활용됨)
바로 new StringBulider() 와 toString() 을 호출할때 한번씩 인스턴스가 생성된다.
public class Test { public static void main(String[] args) { String a = "문자열"; String b = "문자열"; String c = new String("문자열"); if(a==b){ System.out.println("동일 인스턴스"); // 동일 인스턴스 출력 }else{ System.out.println("다른 인스턴스"); } if(b==c){ System.out.println("동일 인스턴스"); }else{ System.out.println("다른 인스턴스"); // 다른 인스턴스 출력 } String str1="문자열"+"abc"; // 내부적으로 String str1="문자열".concat("abc"); concat() 메소드로 대치된다. String str2="문자열"+'A'; String str3="문자열"+3; String str4="AB"+"문자열"+2; // + 연산이 두번 이상인경우 StringBulider 클래스가 사용된다. System.out.println(str1); System.out.println(str2); System.out.println(str3); System.out.println(str4); StringBuilder strbuf = new StringBuilder(); String str5=strbuf.append("AB").append("문자열").append(2).toString(); // str4 와 str5 의 연산결과는 같다. System.out.println(str5); } }