코드 그라데이션

Day20. 오버로딩과 접근제한자 본문

Java/Mega

Day20. 오버로딩과 접근제한자

완벽한 장면 2023. 4. 17. 18:30

오버로딩

- 생성자 또는 메소드에 해당

- 생성자명과 메소드명을 똑같이 하고 매개변수의 차이로 호출하는 구조를 만드는 것

- 리턴 타입은 무관하다

 

개발 => 생성 + 사용인데, 이 메서드 오버로딩 개념은 사용에 초점을 맞추는 것이다.

 

 

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