코드 그라데이션
Day20. 오버로딩과 접근제한자 본문
오버로딩
- 생성자 또는 메소드에 해당
- 생성자명과 메소드명을 똑같이 하고 매개변수의 차이로 호출하는 구조를 만드는 것
- 리턴 타입은 무관하다
개발 => 생성 + 사용인데, 이 메서드 오버로딩 개념은 사용에 초점을 맞추는 것이다.
1. 메서드 오버로딩
ex.
int add(int a, int b){
return a + b;
}
double add(double a, double b){
return a + b;
}
이렇게 되어 있으면,
main에서 메서드를 출력하려면
add(5,10)
add(2.0,3.0)
이게 다 가능하다는 소리
ex2.
기준 : int add(int a, int b) 라고 하면
메서드 오버로딩 기준으로
double add(int c, int d) // X
int add() // O
int add (int a) // O
void add(double a, int b) // O
double add(double a, double b) // O
int add (int a, int b, int c, int d) // O
수업 예제
package mega.backend_onemore.Day20;
public class OverloadingTest1 {
static void add(int a, int b) {
System.out.println(a + b);
}
static void add(double a, double b) {
System.out.println(a + b);
}
static void add(double a, int b) {
System.out.println(a + b);
}
static void add(int a, double b) {
System.out.println(a + b);
}
public static void main(String[] args) {
add(5, 10);
add(0.5, 0.7);
add(1, 0.7);
add(5.6, 7);
// 값을 넣으면 동일한 매개변수 형태에 맞춰서 알아서 값이 들어가게 된다.
}
}
2. 생성자 오버로딩
- 생성자 역시 생성자명은 같고, 매개변수의 타입이나 개수 차이로 인해 객체를 다양하게 만들어 낼 수 있다.
- 생성자를 다양하게 만들어 낸다는 소리지.
class A{
A(int a) {
}
}
class B{
B(int a, int b) {
}
}
이런 식으로 클래스를 하나 더 만들어서 생성자를 추가로 만드는 것보다,
package mega.backend_onemore.Day20;
class A{
A(int a) {
System.out.println("A(int a) 생성자 호출됨. // 인자: " + a);
}
A(){
System.out.println("A() 생성자 호출됨.");
}
}
public class OverloadingTest2 {
public static void main(String[] args) {
A a = new A(5); // A(int a) 생성자 호출
A a1 = new A(); // A() 생성자 호출
}
}
이러한 형태로 하나의 클래스에 다양한 형태의 클래스를 만들어 내는게 더 낫다는 말이다.
접근제한자
- 필드나 메서드, 생성자 등에 접근해서 사용할 수 있는 권한을 설정해주는 키워드라고 할 수 있다.
- public - 누구나 사용 가능합니다.
- protected - 상속을 받은 클래스만 사용이 가능합니다.
- default - 같은 패키지 내에서만 사용이 가능합니다.
- private - 나만 사용 가능함. 보안을 위해 사용합니다.
예시
class AA{
private int a;
AA() {
}
public void setA(int a) {
//로그나 여러기능을 사용이 가능
this.a = a;
}
public int getA() {
//로그나 여러기능을 사용이 가능
return this.a;
}
}
class B{
int b;
}
public class AccessTest1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
AA a = new AA();
//a.a = 10; //에러 O => 왜냐면 a는 private이기 때문에 함부로 접근할 수 없다.
a.setA(10); // 그래서 set을 통해서 값 세팅을 해줘야 한다.
System.out.println(a.getA()); // 세팅해준 값을 가져오기
B b = new B();
b.b = 10; // 에러 X => 왜냐면 필드가 private가 아니기 때문에.
}
}
728x90
'Java > Mega' 카테고리의 다른 글
Day23. super (1) | 2023.04.17 |
---|---|
Day22. 상속 도입.(21은 문제) (0) | 2023.04.17 |
클래스배열 초기화(생성자에서) 예시 (0) | 2023.04.09 |
Day16. HasTest 보충 (0) | 2023.04.09 |
Day16 makeB() 자료 보충공부 (0) | 2023.04.08 |
Comments