코틀린/코틀린 문법

코틀린문법 3주차 강의 [객체지향 프로그래밍]

정혜현 2024. 6. 3. 17:03

객체지향 프로그래밍 OOP Object Oriented Programming

코틀린은 모든 것이 클래스 형태이므로 객체화 할 수 있다.

객체화 : 필요한 데이터를 추상화시켜 객체로 만드는 것

OOP 5대 키워드 : 클래스, 추상화, 캡슐화, 상속, 다형성

 

 

 

 

 

메소드

이름을 붙인 소스코드(로직). 함수메소드

호출해서(상황에 맞게 이름을 불러서) 사용한다. 코드를 재사용할 수 있다. 

코틀린의 진입점, 메인메소드
fun main(){} 코틀린은 메인메소드를 시작점으로 정했기 때문에 호출하지 않아도 실행된다.

 

 

 

 

 

 

 

클래스

정보(프로퍼티)와 행위(메소드)가 담겨있는 프로그램의 설계도

 

  • 데이터 클래스data class
    메소드말고 프로퍼티만 필요할 때 쓰는 클래스. 기본 생성자에 1개 이상의 매개변수가 변수나 상수로 존재해야 한다. 유용한 메소드를 자동으로 생성해준다.
    hashCode(): 객체를 구분하기 위한 고유값을 리턴
    eauals(): 동일한 객체인지 비교해서 true 또는 false를 리턴
    copy(): 현재 객체의 모든 정보를 복사해서 새로운 객체를 리턴
    toString(): 현재 객체의 모든 정보(프로퍼티)를 예쁘게 출력
    getXXX()/setXXX(매개변수): 변수의 값을 리턴하거나 설정

 

  • 실드 클래스sealed class
    상속받을 수 있는 자식클래스들을 미리 정의하는 클래스. 무분별한 상속을 방지한다. 컴파일 시점에 생성할 수 있는 자식을 알 수 있기때문에 효율적으로 다형성을 구현.

 

  • 오브젝트 클래스object classs
    프로그램 실행 동시에 인스턴스화해서 바로 실행해주는 클래스

 

  • 열거 클래스enum class
    인터페이스를 구현하는 추상 클래스. 상수값에 대한 관리지점을 줄일 수 있다.(여러 곳에 동일한 상수를 정의하거나, 상수 외부에 관련된 변수나 함수를 정의하게 되면 코드가 증가할수록 관리가 어려워짐) 

 

 

 

 

 

 

 

생성자

클래스를 실체화할 때 최초로 실행할 로직을 작성해주는 역할. 메모리에 초기 세팅해주는 역할

  • 기본생성자 : 클래스를 만들던 행위와 동일
  • 명시적생성자 :
    주생성자 : 클래스명 옆에 존재(선언부), 한가지 형태로 생성할 때 사용
    부생성자 : 클래스스코프 안에 존재, 여러 형태로 생성할 때 사용

 

 

 

 

 

 

객체

클래스에 선언된 객체(프로퍼티, 메소드)

인스턴스 : 객체를 실체화해서 메모리에 올린 것

 

메모리에 프로퍼티, 메소드가 그대로 저장되는 것이 아니라 주소값을 담는다. 즉 변수에 값이 아닌 주소값을 담는거다.

.으로 연결하는 명령어들은 '그 주소에 가서 뭐해봐'라는 의미로 이해하면 쉽다.

만들어준다는 개념으로 접근하니까 오히려 헷갈린다. 주소로 연결시켜주는 개념으로 이해해야 코드 읽을 때 편할 것 같다.

 

 

 

 

 

 

 

상속

공통적인 요소를 부모클래스에 두어 자식클래스가 받을 수 있는 기능

다형성 구현가능, 유지보수 용이, 클래스간 관계의존성 증가

부모클래스 선언부에 open 키워드를 추가해 상속관계로 만들 수 있다.(무분별한 상속을 방지하고자 생략된 final 키워드로 상속을 막아두었기 때문)

 

 

 

 

 

 

 

 

오버라이딩

부모클래스의 프로퍼티나 메소드를 재설계할 수 있는 기능

자식클래스의 개성을 살릴 수 있다, 일관성 유지, 재사용성으로 유지보수 용이

오버라이딩 단축키 Ctrl+O

부모클래스 내 재설계하고싶은 객체 앞에 open 키워드를 추가하고 자식클래스에서는 override를 써줘야한다.

super : 상속을 받으면 자동으로 만들어지는 부모객체 

 

 

 

 

 

 

 

오버로딩

동일한 이름의 메소드를 만드는 기능

매개변수의 갯수, 자료형을 다르게해서 만들 수 있다.

 

 

 

 

 

 

 

인터페이스

공통적으로 필요한 기능을 외부에서 추가하는 기능

interface 키워드로 인터페이스를 만들 수 있다. 로직없이 추상메소드로 작성하는 것이 좋다.