티스토리 뷰
객체지향 프로그래밍 (Object Oriented Programming, OOP)
프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체로 만들고, 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법
객체지향프로그래밍의 5가지 특징
1. 클래스
2. 추상화
3. 캡슐화
4. 상속
5. 다형성
1. 클래스
[Kotlin] 클래스와 생성자
클래스 용어 정리 정 의 예 시 클래스(Class) 객체를 만들기 위한 설계도 / 템플릿 같은 속성을 갖고 있지만 데이터 값이 다르다. Person(){ 메소드 } 객체(Object) 속성과 기능의 집합 (* 속성 : 멤버변수
joye.tistory.com
2. 추상화
- 객체에서 공통된 속성과 기능을 추출하여 이름을 붙이는 것
- 불필요한 정보는 숨기고 중요한 정보만을 표현하여 프로그램을 간단하게 만듦
3. 캡슐화
- 속성과 기능을 정의하는 변수와 메소드를 클래스라는 캡슐에 분류해서 넣는 것
- 캡슐화를 통해 재활용이 원활하며, 정보은닉(접근제한자)도 가능하다
4. 상속
- 부모클래스의 속성과 기능을 그대로 이어받아 자식클래스에서 물려받아 사용할 수 있는 것
- 기능의 일부분을 변경해야 할 경우 자식클래스에서 다시 재 정의하여 사용할 수 있음
- 적은양의 코드로 새로운 클래스 작성 가능
- 코드를 공통적으로 관리할 수 있어 코드의 추가 및 변경 용이함
5. 다형성
- 이름은 같지만 상황에 따라 다른 기능을 수행할 수 있는 것
- 어떠한 요소에 여러 개념을 넣어 놓는 것
* 상속과 추상화의 구분
상속 | 추상화 | |
공통점 | 공통 속성과 기능을 모아둠 | |
차이점 | 하위 클래스 정의를 위해 상위 클래스를 사용함 | 기존 클래스의 공통요소를 뽑아 상위클래스를 만들어줌 (상향, 하향 상관없음) |
재정의(overriding)를 강제로 하지 않고 부모 클래스의 메소드를 그대로 쓸 수 있음 | 재정의(overriding)를 강제로 함 | |
- | abstract = 미완성의 의미, 어떤 클래스에 추상메서드가 포함되면 해당클래스는 자동으로 추상클래스가 됨 메서드 시그니처만 있고 바디는 없음 ( 추상클래스는 바디를 가질 수 없으므로 객체생성 불가능) |
|
- | 추상화된 상위클래스에서는 선언부만 작성하고 구체적은 내용은 하위클래스에서 구현함, 일종의 스케치 개념 |
추상클래스와 인터페이스
1. 추상클래스
- 추상메서드를 가지고 있는 클래스
- 구현되지 않은 추상메서드를 갖고 있으므로 완벽한 설계도는 아님
- 자식클래스에서 메서드를 무조건적으로 오버라이딩 하기 위함
- 추상메서드 - 메서드의 이름 매개변수 형태 반환타입은 정의되어 있지만 내부안에 코드가 작성되어 있지 않음
- 추상클래스를 상속하는 하위클래스는 추상클래스의 내용을 더 구체화 해야 한다
2. 인터페이스
- 프로퍼티의 상태 정보를 저장할 수 없음 (= 프로퍼티의 초기화가 불가능 하다)
- 추상클래스와 목적이 비슷하지만 하나의 클래스에 여러 인터페이스 구현 가능
- 인터페이스는 클래스가 아니므로 객체를 생성할 수없음
interface Fruit{
val name : String
val taste : String
val money : String
}
interface Fruit {
val name : String = "apple" //불가능함!!!
}
-----------------------------------------------
class TestClass : Inter1, Inter2 { // ,를 구분하여 다수개 사용 가능
}
3. 추상클래스 vs 인터페이스
추상클래스 | 인터페이스 | |
공통점 | 대략적인 설계 명세를 구현하고 상속받는 하위클래스에서 이를 구체화 함 객체 생성이 불가능 |
|
차이점 | 한 번에 한 개의 추상 클래스만을 상속 받을 수 있음 | 다중 상속이 가능 |
상속 받은 정보를 부모 클래스로부터 Look-up 하여 살펴봐야 하기 때문에 인터페이스 보다 비싼 연산이 발생 많은 수를 추상 메소드를 갖는 추상 클래스는 상속에 부담을 줌 |
- |
'Kotlin' 카테고리의 다른 글
[Kotlin] try catch, throw 예외처리하기 (0) | 2023.07.24 |
---|---|
[Kotlin] 오버로딩(Overloading) vs 오버라이딩(Overriding) (0) | 2023.07.23 |
[Kotlin] 클래스와 생성자 (0) | 2023.07.19 |
[Kotlin] Method란 무엇일까? (0) | 2023.07.19 |
[Kotlin] if, when, for, while 제어문 (0) | 2023.07.19 |