[java] 자바의 메소드(Method) 오버로딩(Overloading)과 String클래스

메소드 오버로딩
– 동일한 이름의 메소드를 둘 이상 동시에 정의하는 것
– 매개변수의 개수 또는 자료형이 다르면 오버로딩이 가능하다
– 호출시 매개변수에 따라 구분된다.

생성자와 오버로딩
– 생성자도 오버로딩이 가능하다.
– 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);
	}	
}

 

답글 남기기