Kotlin/객체지향의 기본

클래스의 개념과 생성자

william 2021. 7. 3. 01:26
반응형

객체 지향 프로그래밍 OOP (Object Oriented Programming)이란?

 

객체 지향 프로그래밍은 실제 세계와 비슷하게 복잡한 객체간 상호작용 관계를 표현하고

이를 통해 확장과 재사용이 용이한 프로그래밍입니다.

 

현재까지도 여러 언어에 도입되어 가장 활발하게 사용되는 기법이기도 합니다

또한 함수형(functional programming) ->FP 도 적용됩니다!객체 지향 기법으로 프로그램을 설계할 때는 다음과 같은 개념을 알아 두어야 합니다.

 


객체 지향에 사용되는 개념


추상화(abstraction): 특정 클래스를 만들 때 기본 형식을 규정하는 방법(개념화)

       ->추상화의 예 ) 1.엔진으로 움직이는것 2.운전석이 있는것 3.달릴수있는것 등등


인스턴스(instance): 클래스로부터 구체화 시켜서 객체를 생성(실체화)

       ->인스턴스 예 ) 우리는 추상화(속성)를 통해 자동차라는 클래스를 정의 했고  자동차의 속성을 가진 차들을 회사                                별로 만들수 있습니다

 

                            =>제네시스,k9,그랜져 등등

 


상속(inheritance): 부모 클래스의 내용을 자식 클래스가 그대로 물려 받는 것

                                       상속과 다형성 (tistory.com)

 

다형성(polymorphism): 하나의 이름으로 다양한 처리를 제공하는 것 


캡슐화(encapsulation): 내용을 숨기고 필요한 부분만 사용

          ->캡슐화의 예) 내가 start()라는 함수만 호출하면 내부 일을 모르게 하고 사용만 가능!

                              마치 내가 운전법만 안다면 엔진의 속성을 알지 못해도 작동 시킬수 있는것과 같습니다

 

메시지 전송(message sending): 객체들 간에 주고 받는 메시지

 


연관(association): 클래스들의 관계가 있습니다

           ->연관의 예) 의사클래스       환자클래스 (약한 결합) 

                             차  클래스       엔진클래스 (강한결합)

 

클래스와 추상화


클래스(Class)란 분류, 계층, 등급 등의 뜻을 가지고 있습니다.
사람들은 실제 세계에서 대상을 이해할 때 각각의 특징이나 어떻게 활동하는지를 기록해서 이에 따라 이름을 붙이고 개념을 정의합니다(추상화 과정).


예를 들어 이곳저곳에서 다양한 새를 발견했고 이것을 분류한다고 해 봅시다. 먼저 라는 기본 개념을 정의하고 새롭게 발견한 개별적인 새의 일반적인 동작(함수)과 특징(속성)을 알아냅니다.
이처럼 우리가 목표로 하는 것에 대해 필요한 만큼 속성과 동작을 뽑아내서 정의하는 과정을 추상화(Abstraction) 라고 합니다.



객체 지향과 용어

보통 자바에서는 클래스에 포함된 기능을 나타내는

함수를 메서드(Method) 변수를 필드(Field)라고 합니다.

그리고 메서드나 필드는 클래스 내부에 정의되므로 클래스의 멤버 메서드, 멤버 필드라고도 합니다.
코틀린에서는 필드 대신에 프로퍼티(Property)[]라는 용어를 쓰는데요. 그 이유는 변수 혹은 필드에 내부적으로 접근 메서드가 포함되어 있기 때문입니다.


크게보면 클래스와 멤버라고 할수있고 멤버에는 프로퍼티와 함수(메서드)가있다

클래스 선언


클래스는 class키워드를 통해서 정의합니다. class Bird(){} 형태

생성자 : 클래스를 통해 객체가 만들어 질때 기본적으로 호출되는 함수 

           생성자는 주생성자부생성자로 나뉩니다!

 


1.주 생성자(Primary Constructor)

 

class A constructor(){} 형태 (construct생략가능합니다!) 

만약 생략을 안한다면

class Bird constructor(var name: String,var wing: Int,var beak : String){} 형태이죠

 

또한 여기서 우리가 알아야 할 것은 주 생성자에서는 기본값을 설정 할 수있다는 것입니다

주생성자에 var color : String = "blue"를 이용하면 객체를 생성할때 자동적으로 생성자가 생성되어서 따로 설정을 하지 않아도 됩니다

 

class Bird (var name: String,var wing: Int,var beak : String,var color : String = "blue") 이렇게 미리 설정했다면

 

Bird("coco",2,"long",blue) 하지 않고

Bird("coco",2,"long") 만 해도 된다는 말이죠!

 

또한 우리가 원래 알던 것처럼 이렇게 미리 설정한 생성자의 값도 

출력전에 변경만 한다면 변경도 가능합니다!


1.부 생성자(subConstructor)

 

개인적으로 주생성자가 굉장히 사용하기도 편하고 좋다고 생각하는데요

왜 부 생성자가 있을까요?

이유는 생성자를 여러개 설정하고 싶을때 사용 가능하기 때문입니다

 

부생성자는 클래스 내(프로퍼티)에서 생성 가능한데요 

같은 형태만 아니라면 여러개 사용가능합니다!

 

이로 인해서 E("Young",100,200)라는 값을 입력했지만 생성자 블럭에 따라 각자 다른 값을 갖게 되는 값을 상황

만들수있습니다!

 

또한 여기서 중요한점은 init이라는 초기화인데요

초기화 시점은 그 어떤것보다 처음이라

초기화 시점에 값을 할당한다면 에러가 발생합니다

 

결과적으로 부생성자에 따라 각자다른값이 나왔습니다.

 

 

참고 사이트 : [Kotlin] 생성자 정리 (velog.io)

 

[Kotlin] 생성자 정리

이번 글의 코드는 여기에 있습니다.아래와 같이 클래스 이름 옆에 괄호로 둘러싸인 코드를 주 생성자 라고 부릅니다. 주 생성자는 생성자 파라미터를 지정하고 그 생성자 파라미터에 의해 초기

velog.io

코틀린 프로그래밍 기본 2 > 1-2 생성자를 통해 태어나요! : 부스트코스 (boostcourse.org)

 

코틀린 프로그래밍 기본 2

부스트코스 무료 강의

www.boostcourse.org

 

반응형