* 오버로드
: 한 클래스 안에 같은 이름이지만 인수의 수나 형이 서로 다른 메소드를 여러 개 정의한 것.
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장에서 한 번 더 다룬다.
'메타버스기반게임콘텐츠기획 > 스터디(C#이 보이는 그림책)' 카테고리의 다른 글
* 4장, 클래스 (문제) (0) | 2021.11.28 |
---|---|
* 4장, 클래스 (4-4) 생성자 / 속성 / 인덱서 / Main() (0) | 2021.11.28 |
* 4장, 클래스 (4-2) (0) | 2021.11.25 |
4장, 클래스 (4-1) (0) | 2021.11.24 |
3장, 제어문 (3-2, 문제) (0) | 2021.11.23 |