객체지향 (Object-Oriented Programming)
객체지향의 장점: 모듈화, 디버깅, 확장성, 코드 재사용성
객체지향의 단점: 느린 속도, 설계에 많은 시간 소요
객체지향의 특성
- 캡슐화 (Encapsulation): 객체를 캡슐로 → 내부를 보호하고 볼 수 없게 함
- 상속 (Inheritance): 슈퍼클래스에 만들어진 필드와 메소드를 물려 받음 → 코드 중복 작성 방지
- 다형성 (Polymorphism): 같은 이름의 메소드가 다르게 구현 (오버라이딩, 오버로딩 등)
객체
객체 (Object): 속성 (Attribute)과 메서드 (Method)로 구성됨
속성 (Attribute): 객체의 상태나 특성을 정의 (데이터)
메서드 (Method): 객체의 동작을 정의
클래스 (Class): 객체를 생성하기 위한 틀
인스턴스 (Instance): 클래스를 기반으로 만든 객체
생성자 (Constructor): 클래스로부터 객체를 생성할 때 초기화 해 주는 메서드
주 생성자: 새로운 객체를 만들 때 반드시 필요로 하는 파라미터
부 생성자: 새로운 객체를 만들 때 optional한 파라미터
init: 인스턴스 생성 시 제일 먼저 호출되는 함수
constructor: 해당하는 부 생성자로 인스턴스를 생성한 경우 호출되는 함수
상속 (Inheritance): 객체가 다른 개체를 상속받아 상속받은 객체의 요소를 사용
(상속을 하려면 open 키워드를 붙여야 함)
class<className>(parameter): <superClassName>(superClassParameter)
추상 클래스 (Abstract Class), 추상 함수 (Abstract Fun)
추상 클래스: 완전한 구현 x, 인스턴스화 x, 자식 클래스에서 완성시켜야 함
추상 함수: 구현부가 존재 x, 자식 클래스에서 함수를 override해서 구현해야 함
- open 키워드 없이 상속, override 가능함
인터페이스 (Interface)
- 변수 정의 가능, 값 할당 불가능
- 구현부가 있는 함수 정의 가능
- 서브클래스에서 여러 개의 인터페이스 상속 가능
함수 (Function)
fun <functionName>(parameterName:dataType) : returnDataType {…}
top-level 함수: 클래수 내에 포함되어 있지 않고 최상단에 선언된 함수
클래스 멤버함수: 클래스 내부에 정의된 함수
가시성 변경자 (Visibility Modifier)
- public: 기본값, 어느 위치에서든 참조 가능
- private: 선언한 파일 내부에서만 참조 가능
- internal: 같은 module 안에서만 참조 가능
- protected: 선언한 Class 내부에서만 참조 가능 + subclass에서는 참조 가능
Package: 관련된 코드를 묶어서 구성
import: 다른 package를 참조
Module: 한번에 컴파일 되는 묶음, 대체로 기능 단위
프로젝트 > 모듈 > 패키지 > 파일
🙋🏻♂️ 이번 강의에서 특히 중요하다고 생각하는 것
이 강의 모든 내용이 객체지향을 이해하기 위한 것이라고 생각한다.
지금까지 개발하면서 객체지향의 장점을 살려 본 경험이 별로 없기 때문에… 객체에 대한 이해와 가시성 변경자를 잘 이해해야 할 것 같다… 그래야 객체지향의 장점을 잘 사용할 수 있지 않을까
+ 아직 이론만으로 배우고, 실전으로 해 본 적이 없기 때문에 모르는 게 많다. 앞으로 공부하면서 알게 된 것들은 추가로 작성할 예정이다.
'코틀린' 카테고리의 다른 글
코틀린 공부 이야기 - 4주차 (0) | 2024.03.03 |
---|---|
코틀린 공부 이야기 - 2주차 (1) | 2024.02.26 |