오버로딩 유형
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)일땐 바뀌는 것임.
가변적 매개변수
매개변수의 개수가 변경될때마다 메서드를 수정해야 하는 경우 유지보수가 너무 불편해져서 등장.
사용시 주의사항) 여러개의 매개변수와 같이 사용할 때 위치 주의! 메서드 선언부의 매개변수 리스트 마지막위치에서 딱 한번만 사용가능하다
'개발삽질 > SSAFY하는 동안 기록' 카테고리의 다른 글
[SWEA]자바 초급(2) - 7차시: 인터페이스와 패키지 (0) | 2022.01.01 |
---|---|
[SWEA]자바 초급(2) - 5차시, 6차시: 상속, 내부클래스, 객체의 형변환 (0) | 2021.12.29 |
[SWEA]자바 초급(2) - 2,3차시: Modifier (0) | 2021.12.29 |
[SWEA]자바 초급(2) - 1차시: 객체지향 핵심 원리 (0) | 2021.12.29 |
[SWEA] 자바 초급(1) - 3차시, 4차시: 연산자, 배열, 제어문 (0) | 2021.12.29 |
댓글