Programming language/Kotlin

[코틀린 OOP #1] - 클래스와 생성자

Think-About 2022. 8. 16. 12:57

코틀린 언어의 기본적인 내용을 앞서 살펴보았습니다.
마지막 중요한 관문이 남아있습니다. 바로 코틀린에서의 객체지향 프로그래밍(OOP)입니다.
코틀린 객체지향 프로그래밍에 대해 공부하기 앞서 기본적인 내용을 모두 살펴보고 오셔야 합니다.


코틀린 객체지향 프로그래밍 OOP
코틀린 객체지향 프로그래밍 OOP

코틀린에서 객체지향 프로그래밍

객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 컴퓨터 프로그래밍의 패러다임 중 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.
(출처 : 위키백과)

객체지향 프로그래밍의 정의는 위와 같습니다. 하지만 잘 와닿지 않을 수 있습니다.
코틀린과 안드로이드 프로그래밍에서의 객체지향 프로그래밍은 무엇을 의미하는지 정리해봐야 합니다.

우선 안드로이드 프로그래밍에서 객체지향 프로그래밍은 안드로이드 앱 개발에 있어 핵심 기법인데, 클래스를 정의하고 그에 대한 객체를 생성하여 정보를 이용하는 것입니다.
안드로이드 앱을 개발할 때 안드로이드 SDK가 제공하는 클래스를 이용하거나 상속받아서 주로 개발하게 됩니다.
즉, 안드로이드 개발자는 클래스를 많이 다룰 수밖에 없으며 안드로이드 개발자가 되려면 정확히 이해해야만 합니다.



코틀린에서 객체지향 프로그래밍은 다른 언어와 개념적으로 큰 차이가 없습니다.
자바 언어에 대한 경험이 있으신 분은 쉽게 여겨 넘어갈 수도 있는데,
코틀린에서 사용하는 기법이 있으므로 넘어가지 말고 꼭 정리해두셔야 합니다.
특히 큰 차이점으로, 코틀린은 생성자를 주 생성자와 보조 생성자로 구분한다는 점이 있습니다.


코틀린 클래스와 생성자

클래스는 하나의 데이터 타입으로도 이해할 수 있으며, 생성자, 변수, 함수 등 같은 종류의 집단입니다.
생성자, 변수, 함수, 클래스는 클래스를 구성하는 멤버입니다.

클래스 선언

코틀린으로 클래스를 선언할 때는 class 키워드를 사용합니다.
클래스의 생성자를 선언할 때는 constuctor 키워드를 사용합니다.

함수, 변수는 동일하게 선언하면 됩니다.

코틀린 클래스 보조 생성자 예시
코틀린 클래스 보조 생성자 예시

위 예시에서 constructor 부분을 주의 깊게 살펴봐야 합니다.
앞서 코틀린은 주 생성자와 보조 생성자를 구분한다고 했었죠?
위처럼 생성자를 작성했을 때 생성자는 보조 생성자입니다.
자바를 공부해보신 분들은 굉장히 익숙한 코드일 수 있습니다.
그럼 주 생성자는 어떻게 선언하는지 알아볼까요?

코틀린 클래스 주 생성자 예시
코틀린 클래스 주 생성자 예시

클래스 이름(Student) 뒤에 괄호로 표현하며 매개변수를 선언할 수도 있습니다.
괄호 앞에 constructor 키워드를 적어도 되며 위 예시는 생략한 예시입니다.
클래스의 객체가 생성될 때 init 키워드로 지정한 영역이 실행됩니다.
위 예시는 매개변수로 전달받은 name과 address를 init 영역에서 멤버 변수에 기억하도록 작성한 것입니다.

생성자의 매개변수로 선언된 name과 address는 매개변수일 뿐 클래스의 멤버가 아니라는 것을 주의해야 합니다.

객체 생성

클래스를 선언했고 객체를 생성하는 방법은 다음과 같습니다.

코틀린 클래스 객체 생성
코틀린 클래스 객체 생성

코틀린 클래스의 이름과 생성자로 선언한 매개변수에 전달할 인자를 명시하면 됩니다.
예시의 경우 이름과 주소를 전달했지만 이름만 전달하고 싶다면 생성자를 하나 더 선언하면 됩니다.
매번 강조하지만 꼭 코틀린 플레이그라운드나 본인의 환경을 통해 실습해보셔야 합니다.


코틀린 주 생성자 vs 보조 생성자

코틀린 클래스와 생성자에 대해 공부했지만 의문이 남아있을 수 있습니다.

주 생성자와 보조 생성자 중 뭘 써야 할까?

정답은 개발자 마음!입니다.
주 생성자와 보조 생성자를 구분한다는 코틀린의 특징일 뿐이라고 할 수 있겠습니다. 또한 주 생성자와 보조 생성자가 모두 있을 때는 오류가 발생하며 이의 경우 주 생성자와 보조 생성자를 연결해주어햐 합니다. 하지만, 개인적으로는 보조 생성자만 사용하는 편이며 둘 다 사용 시 관리만 힘들고 혼동이 일어난다고 생각하기에 따로 정리하진 않겠습니다.
결론은 주 생성자와 보조 생성자 중 하나를 선택할 때는 개발자 본인 마음이며,
둘 다 사용하려면 반드시 주 생성자가 실행되도록 설계해야 한다로 정리할 수 있겠습니다.
필자의 경우 코틀린 이전에 자바와 C++을 공부했기에 보조 생성자가 익숙해서 보조 생성자만 사용합니다.


슬슬 어려워진다고 느꼈을 수도 있습니다.
아직 익숙하지 않은 것이지 어려운 것이 아니라고 말씀드리고 싶습니다.
꼭 실습해보시면서 빨리 익숙해지시는 것이 중요합니다.
실습 중 궁금한 점 댓글로 남겨주시면 최대한 쉽게 답변드리도록 하겠습니다.

감사합니다.

Think-about ~ Kotlin!

'Programming language > Kotlin' 카테고리의 다른 글

[코틀린 OOP #3] - 접근 제한자  (1) 2022.08.18
[코틀린 OOP #2] - 상속, 오버라이딩  (2) 2022.08.17
코틀린 반복문  (0) 2022.08.13
코틀린 컬렉션 타입  (2) 2022.08.13
코틀린 함수 매개변수  (2) 2022.08.05