본문 바로가기
  • 1+1=3
개발삽질/SSAFY하는 동안 기록

[SWEA]자바 초급(2) - 4차시: 메서드 오버로딩과 매개변수

by 여스 2021. 12. 29.
반응형

오버로딩 유형

1. 매개변수 개수와 타입이 모두 다른 경우- OK

2. 리턴타입이 다른 경우 - 오류!!!

3. 매개변수의 이름이 다른 경우 - 오류!!

4. 매개변수의 개수와 타입이 같지만 순서가 다른 경우 - OK

5. 매개변수가 형변환된 다른 타입인 경우 - OK!!

묵시적 형변환 관련 포스팅은 이 링크를 참조: https://lovenewthing.tistory.com/68

 

this()

같은 클래스 내의 오버로딩된 다른 생성자 메서드를 호출할 때 사용함.

 

초기화 코드가 중복되어있는 생성자들이 있다.

이런 불필요한 초기화 코드를 최소화 하기 위해 this()사용한다.

 

값복사와 주소복사

- 값복사:

score의 값을 copyScore에 복사하면 기본형이라서 값복사가 되는데, score의 값을 수정해도 copyScore는 그대로 80임.

 

- 주소복사:

참조형 변수들은 값이 아닌 메모리주소가 복사됨. 따라서 아래예시에서 배열의 값을 수정하면, list나 copyList나 똑같이 다 변경됨

 

 

- 기본형 매개변수의 값 복사 예제

출력결과 예측해보삼!!!

출력결과: 10 100 10.

값복사만 하니까 main()에서의 score랑 changeScore()에서의 score는 아무관계가 없는 애들임!

 

 

 

- 참조형매개변수의 값 복사 예제

참조형 매개변수는 참조하는 객체의 주소값이 복사되어 전달됨. 즉 같은 객체의 주소를 가지기 때문에 하나의 객체를 두 개의 참조변수가 공유한다. ( 나 이거 생각안하고 해왔는데 조심하면서 다시 한번 보자!!!)

출력결과: 40 100 100

 

 

즉, 단순히 메서드 수행에 필요한 값만 넘기고자 할 때엔 매개변수를 기본형으로 선언하고, 메서드 수행 이후에도 수행결과를 지속적으로 유지하고자 하는 경우엔 매개변수를 참조형으로 선언해야 한다.

 

 

또 다른 예제. (나 이거 비슷한거 예전에 결과보고 헷갈렸던 적이 있었는데 이런 이유였다니)

 

class Pair{
	int x;
    int y;
    
    Pair(int x, int y){
    	this.x = x;
        this.y = y;
   	}
}

clas SwapTest{
	public static void swap(int x, int y){
    	int tmp;
        
        tmp = x;
        x = y;
        y = tmp;
   }
   public static void swap(Pair p){
   		int tmo;
        
        tmp = p.x;
        p.x = p.y;
   }
   public static void main(String args[]){
   		int x = 10, y = 20;
        Pair p = new Pair(10,20);
        
        System.out.println(x +"  "+ y);
        System.out.println(p.x +"  "+ p.y);
        
        swap(x,y);
        swap(p);
        
        System.out.println(x +"  "+ y);
        System.out.println(p.x +"  "+ p.y);
        
   }
}

결과는 알지 그냥 swap(x,y)일 땐 바뀌지 않지만, swap(p)일땐 바뀌는 것임.

 

 

가변적 매개변수

매개변수의 개수가 변경될때마다 메서드를 수정해야 하는 경우 유지보수가 너무 불편해져서 등장.

 

사용시 주의사항) 여러개의 매개변수와 같이 사용할 때 위치 주의! 메서드 선언부의 매개변수 리스트 마지막위치에서 딱 한번만 사용가능하다

반응형

댓글