본문 바로가기
메타버스기반게임콘텐츠기획/스터디(C#이 보이는 그림책)

4장, 클래스 (4-3) 오버로드 / 선택적 인수 / 액세스 수식자

by Queenut 2021. 11. 26.

 * 오버로드

 : 한 클래스 안에 같은 이름이지만 인수의 수나 형이 서로 다른 메소드를 여러 개 정의한 것.

class Calc
{
       public int add(int a, int b)
       {
              return a + b;
       }

       public int add(int a)
       {
              return a + 1;
       }

       public double add(double a, double b)
       {
              return a + b;
       }
}

다 같은 메소드(add)를 사용했지만 인수의 형은 다르다.

 

 

 * 오버로드 출력

메소드를 호출할 땐, 전달한 인수에 따라 수와 형에 대응하는 메소드가 호출된다.

 

 

Q. 위에 스트링 네임, 스트링 플레이스 다 만들어놨는데 왜 밑에 또 만드나요? 그냥 간단하게 쓰려고? 그럼 그냥 name, place라고 써도 되나요?

→ Self A. 그래서 해봤더니 에러뜨더라.

 

Q. print()가 표시해주는 메소드란건 알겠는데 왜 사용하는 걸까? 그동안 Console.WriteLine()으로만 써도 잘 나왔는데.

→ Self A. 가장 아래 블록을 보면 print하고 값만 넣어줘도 출력이 됐다. 이렇게 간단하게 실행하려고 그런 듯!

 

 

 

 * 선택적 인수

 : 메소드의 인수에 기본값을 설정할 수 있다.

double CalcCircle(int rad = 1 double pi = 3.14)
{
       return rad * rad * pi;
}

//////// 만약 값을 변경하고 싶다면,

void Output()
{
       double area;
       area = CalcCircle();     // → = CalcCircle(1, 3.14);
       area = CalcCircle(10);     // → = CalcCircle(10, 3.14);
       area = CalcCircle(20, 3.14159);     // → = CalcCircle(20, 3.14159);
}

 

 - 주의: 기본값을 모든 인수에 설정할 필요는 없다.

double CalcCircle(int rad, double pi = 3.14)     //  두 번째 인수에만 기본값 설정.
..
...

  그러나 첫 번째 인수에만 기본값을 설정할 순 없다.

double CalcCircle(int rad = 1, double pi)     //  마지막 인수를 건너뛰고 기본값 설정하면 컴파일 에러 뜸.
..
...

인수에 기본값을 설정할 때는 맨 끝에서부터 차례대로 설정해야 한다.

 

 

메소드를 호출할 때, 인수의 이름을 붙여 호출할 수 있다.

예를 들어, 선택적 인수 부분 맨 위 페이지의 CalcCircle 메소드를 호출할 경우,

void Output()
{
       double area;
area = CalcCricle(pi : 3.14159) ;     //  (1,3.14159)와 같다.     //  특정 인수만 지정할 수 있다.
area = CalcCircle(pi : 3.14159, rad : 20)     //  (20, 3.14159)와 같다.     //  인수의 순서를 바꿀 수 있다.
..
...

인수의 변수명 뒤에 : 을 붙여 다음처럼 지정하라.

 

 

 

 

 * 액세스 수식자

 : 액세스(외부의 객체에서 데이터에 접근하는 것)

액세스 수식자 의미
public 해당 클래스 이외의 다른 객체에서도 액세스할 수 있다.
private 중요 데이터를 함부로 변경하는 걸 방지하기 위해, 다른 객체에서는 액세스할 수 없다.
protected 해당 멤버가 들어있는 클래스 및 상속한 클래스에서만 액세스할 수 있다(다른 객체에선 X).
internal 구성 단위(어셈블리)에서만 액세스할 수 있다.

5장에서 한 번 더 다룬다.