객체지향 프로그래밍 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 키워드로 인터페이스를 만들 수 있다. 로직없이 추상메소드로 작성하는 것이 좋다.
'코틀린 > 코틀린 문법' 카테고리의 다른 글
코틀린문법 5주차 강의 [심화] (0) | 2024.06.12 |
---|---|
코틀린문법 4주차 강의 [심화] (0) | 2024.06.10 |
코틀린문법 2주차 강의 [컨벤션 ~ 반복문] (0) | 2024.06.03 |
코틀린문법 1주차 강의 [프로그래밍 ~ 개발환경] (0) | 2024.06.03 |
Git Book 문법 [코딩컨벤션 변수 함수 클래스] (0) | 2024.05.29 |