2021. 1. 23. 14:49ㆍDev.Program/Java & Spring
< 메서드 오버로딩(Method Overloading) = 다중 정의 >
p.197
- 동일한 이름의 메서드를 여러개 정의하는 것
- 이름은 동일하고 파라미터가 서로 달라야 함
- ⇒ 파라미터의 타입 또는 개수가 달라야 함
- 리턴타입은 오버로딩과 무관함(달라도 상관없음)
- 반드시 메서드를 호출하는 시점에서 오버로딩 된 메서드를 구분할 수 있어야함
======== Ex.java 만들기.
문제 )
정수 num 을 전달받아 절대값을 리턴하는 abs() 메서드 호출
정수 num 을 전달받아 절대값을 리턴하는 abs() 메서드 정의
- 더블 타입을 넣으면 오류남!
- public int abs(int num) {} ⇒ int 타입을 받기 때문에!
- 그래서 double 타입을 받아서 리턴하는 메소드를 따로 정의해줘야함.
- 오류가 사라짐
< 메서드 오버로딩 = 다중정의 >
p.197~
- 우리가 자주 사용하는 println도 오버로딩이 적용된것!!
- 오버로딩이 없었다면 System.out.printlnInt() / System.out.printlnString() …. 이렇게 적어야 했을 것
- ctrl + space 눌러보면, 오버로딩을 적용할 경우 이렇게 뜸!
- Duplicate : 중복값이기 때문에 오버로딩할 수 없다(오류!)
- num2로 바꿔도 오류 안없어짐! (바깥에선 구분할 수 없기 때문)
- ⇒ 바깥에서 2 라는 int 값을 들고올 때 이 값을 int num 에 넣을지, int num2 에 넣을지 구분할 수 없기 때문이다.
- public double abs(int num2) { } double로 바꿔도 오류발생!
- ⇒ 리턴타입만 바꾸는 것은 오버로딩이 아니다!
- (호출하는 시점과 리턴타입은 아무런 관계가 없다)
- 바깥에서 호출하는 값이 int 값이므로 리턴값을 바꿔도 오류가 없어지지않는다.
- 똑같이 바깥에서 2 라는 int 값을 받아왔을 때, num에 넣을지 num2에 넣을지 구분할 수 없기 때문!
문제 ) 오버로딩 클래스 생성하기
푼 답 )
- 출력창
⇒ 오버로딩 개념 잘 익히기 ( 껍데기는 같고 파라미터로 구분! )
> 연습해보기 )
======== Test.java 새 문서 만들기
- 문제
푼 답 ) …………..
선생님 답안 ) 리턴값이 없는 문제!
======== Ex2.java 새 문서 만들기
문제 ) 파라미터가 다른 메서드 오버로딩
푼 답 ) =선생님 답
- ctrl + space : 오버로딩 생성 된 거 볼 수 있다!
- 이렇게 순서 바꾸는 건 가능
- 이렇게는 오류남! 파라미터 이름 바꾸는건 의미 없다. 같은 스트링타입이라!
======== Test2.java 새 문서 만들기 // 계산기...와 비슷하게(물론 계산기는 이렇게 안함!)
문제 ) 연산기호(연산자)와 연산에 사용될 데이터 2 ~ 4개를 전달받아 연산 수행
- 1차 ) +로 받았을 때, 2차) -로 받았을 때 !
답 ) 풀다가 안되서 수영이 코드 도움……..ㅎㅎ
https://blog.naver.com/vjvl4642/221799851014
- 희진이 블로그
public void cal(char ch, int a, int b) {
if(ch == '+') {
System.out.println(a + b);
} else if (ch == '-') {
System.out.println(a - b);
} else if (ch == '*') {
System.out.println(a * b);
} else if (ch == '/') {
System.out.println(a / b);
}
}
- 곱셈/나눗셈 까지 간단하게 추가 가능!
- ⇒ if 문 대신 switch ~ case 문으로도 가능 (나중에 해보기)
< 가변인자 = 비정형인자 >
p189 (4)
======== Ex3.java 새 문서 만들기
int … nums
- 가변인자 ...
- ...은 “int… nums”로 써도 “int … nums”로 써도 “int ...nums”로 써도 다 상관없다!
- ⇒ “ … ” 위치는 중간에만 있으면 다 OK!
- 띄어쓰기 아무곳에나 상관없이 타입과 변수명 사이에만 오면 됨.
- na.print("유라", "수영", "해진", "희진"); // 오류!
- 3개 까지만 만들었기 때문에 4개 적기 시작하면 오류가 난다!
- 해당 갯수만큼 메서드 오버로딩 수행 필수
- 가변인자 만들 때 점 세개 찍는 순간 변수명 생성해줌 (근데 우린 다른 이름 줄 거)
- 답 ) 문제 풀고 출력했더니 출력창이…..ㅎㅎ
for(int i = 0; i < names.length; i++) {
System.out.println(names[i] + " ");
}
- names[i] 배열이니까!! 이부분을 안해줘서 오류났던거!
va.print();
- 아무것도 출력 안해도 오류 안남!
> 주의사항! 가변 인자는 마지막 파라미터로 단 한 번만 사용 가능!!
- 가변인자가 다른 파라미터보다 앞에 올 수 없다!
- 가변인자는 0 ~ 무한대 까지 받을 수 있기 때문에 언제 끝날지 몰라서!
- 무조건 마지막 파라미터가 되어야 함.
- 같은 이유로 가변인자가 2개 이상 올 수 없음!
- 가변인자가 앞쪽에 오는게 불가(언제 끝날지 모르기 때문에)!
======== Test3.java 새 문서 만들기
- 문제 ) 가변인자를 활용한 계산기
- 푼 답 ) 완전 틀림 ㅜ.ㅜ 다시 풀어보기
- 푼 답 ) 또 틀림……..num[i+1] 을 하면 i < num.length 에서 num.length 범위를 넘어가기 때문에 오류가 생긴다.
- 푼 답
- 선생님 답안
int a = 0; // 가장 많이 하는 실수!!
for(int i = 1; i < num.length; i++) // 같이 바꿔주기!
이렇게 돌리면 if 문 안에 for 문이 들어가서 for문을 덜 돌릴수있다. (처리 속도가 빨라짐)
> 최소한 피연산자(데이터)가 2개 이상일 때만 연산 수행
if(num.length < 2) {
return;
}
'Dev.Program > Java & Spring' 카테고리의 다른 글
[Java] 패키지(package) / import (0) | 2021.01.23 |
---|---|
[Java] 생성자(Constructor) (0) | 2021.01.23 |
[Java] 변수 선언 위치에 따른 분류 / 접근제한자 (0) | 2021.01.23 |
[Java] 클래스의 객체 / 인스턴스화 (0) | 2021.01.19 |
[Java] 메서드(Method) (0) | 2021.01.19 |