무효 클릭 IP 추적 중...
c#

[c#] 생성자 오버로딩 개념 정리( + 다른 생성자 호출)

꼬예 2022. 5. 19.

오버로딩이란 함수명은 같지만 시그니쳐(매개변수 구성)를 달리해서 여러개의 함수를 사용할 수 있는 기법을 말합니다.

 

만약 이런 기능이 없다면, 매번 다른 명의 함수명을 생각해내야 하는 귀찮음이 발생하겠죠?

 

오버로딩생성자에서 자주 사용되는데요. 

예시를 통해 한번 확인해보겠습니다. 

 

 

1. 기본 생성자 오버로딩

 

위 예시를 보면 앞선 정의에서 말씀 드린것처럼 같은명의 함수(여기선 생성자)이지만, 하나는 인자를 받고 다른 하나는 인자를 받지 않는 형태로 시그니쳐를 달리했습니다.

 

그리고 객체 생성 후 필드에 접근해보겠습니다.

이번 예시는 인자로 아무것도 넣지 않은 형태입니다.

 

output:

결과를 보시면 첫번째 생성자가 실행된걸 알 수있습니다.

 

이번에는 string 인자값을 한번 넣어 실행해보겠습니다.

결과를 보시면 알 수 있듯이 두번째 생성자가 실행이 되었습니다.

이렇듯 오버로딩 기법을 통해 인자가 들어오냐 몇개가들어오냐에 따라 원하는 생성자를 실행 시킬 수 있는 것입니다.

 

 

 

2. this 생성를 이용한 포워딩 기법

이번에는 같은 기능이지만 좀 더 fancy 한 방법을 소개 해드리겠습니다.

 

아래 코드는 위와 완전히 같은 내용의 코드입니다. 

 

조금 특이한것이 Animal()생성자this("No Name")라는걸 상속한 형태입니다. 그리고 body에는 아무것도 없네요.

여기서 thisAnimal 객체를 의미하고 여기에 string 인자를 넣었다는건, 두번째 생성자를 실행시킨다는 것입니다. 

(왜냐하면 인자로 하나의 string 값이 넘어갔기 때문이죠.)

 

즉 정리하자면 인자를 넣지 않은 채로 클래스 객체를 생성할경우, 아무것도 안넣었기때문에 Animal() 생성자를 실행할것입니다. 하지만, 상속형태로 this("No Name")가 들어가있는 형태이기 때문에 자동적으로 "No Name"을 인자로 한 두번째 생성자가 실행이 됩니다. 

 

조금 복잡하게 느껴질 수도 있겠지만 글을 반복해서 읽어보면 이해가 되실겁니다.

 

굳이 이런 방식으로 코드를 작성할 필요가 있을까 싶겠지만, 생성자 수가 많아질 수록 더욱 간결한 코드는 빛을 발하게 될것입니다.

 

  • 트위터 공유하기
  • 페이스북 공유하기
  • 카카오톡 공유하기
이 컨텐츠가 마음에 드셨다면 커피 한잔(후원) ☕

댓글