Class (클래스) Encapsulation (캡슐화) 관련 속성에 관해 작업을 실행하는 메서드를 클래스에 래핑함Abstraction (추상화) 캡슐화의 확장으로 내부 구현 로직을 최대한 숨긴다는 개념Inheritance (상속) 상위-하위 관계를 설정하여 다른 클래스의 특성과 동작을 토대로 클래스를 빌드할 수 있음Polymorphism (다형성): 여러 객체를 한 가지 공통 방식으로 사용하는 능력fun 메소드이름(변수명:자료형, 변수명:자료형 ....) : 반환자료형 {
소스코드 로직
}

class 키워드를 활용property와 행위method를 작성data class Name {
property1
property2
}
property만 가지고 있는 클래스var/val가 존재해야 함method 자동 생성hashCode() 객체를 구분하기 위한 고유값 리턴equals() 동일한 객체인지 비교해서 true 또는 false 리턴copy() 현재 객체의 모든 정보를 복사해서 새로운 객체 리턴toString() 현재 객체의 모든 property 예쁘게 출력getXXX()/setXXX(매개변수) 변수의 값을 리턴하거나 설정sealed class 부모클래스 {
class 자식클래스1 : 부모클래스생성자
class 자식클래스2 : 부모클래스생성자
}
inheritance와 관련된 개념SuperClass 부모클래스SubClass 자식클래스polymorphism) 구현sealed 클래스의 서브클래스 각각에 대해 여러 개의 인스턴스 생성 가능sealed 클래스의 계층을 생성할 수 있음static 대신 사용하는 키워드fun main() {
}
// 클래스 선언부에 생성자를 명시함
class Character(_name: String, _hairColor: String, _height: Double) {
var name: String = ""
var hairColor: String = ""
var height: Double = 0.0
// 매개변수를 직접 넘기지 않음
init {
println("매개변수 없는 생성자 실행 완료!")
}
fun fireBall() {
println("파이어볼!")
}
fun compositing(device1: String, device2: String) {
var device3 = device1 + device2
println("새로운 무기인 ${device3}입니다.")
return device3
}
}
constructor 함수를 만들 경우 반드시 init 함수를 호출하여 초기화 해주어야 함fun main() {
}
class Character {
var name: String = ""
var hairColor: String = ""
var height: Double = 0.0
// 명시적 생성자 (Constructor)
// _name, _hairColor, _height와 같이 생성자에 변수를 넘기는 경우에 사용함
constructor(_name: String, _hairColor: String, _height: Double) {
println("${_name}을 생성자로 넘겼어요.")
println("${_hairColor}을 생성자로 넘겼어요.")
println("${_height}를 생성자로 넘겼어요.")
}
fun fireBall() {
println("파이어볼!")
}
fun compositing(device1: String, device2: String): String {
var device3 = device1 + device2
println("새로운 무기인 ${device3}입니다.")
return device3
}
}
Object라고 함final 키워드로 기본적으로 상속을 막아둠open 키워드를 활용해서 상속관계를 만들 수 있음polymorphism을 구현할 수 있음property나 행위method를 재설계할 수 있음method를 재설계함📌 어차피 재설계하면서 상속이나 오버라이딩을 하는 이유?
- OOP관점에서는 클래스들 간의 관계를 만들고, 일관성을 유지하는 목표를 가짐
- 만약 필요한 기능이 있을 때마다 별도의 이름으로 만들게 된다면 일관성을 해침
- 프로그램에 문제가 생기지는 않지만 재사용성이 떨어져 유지보수가 어려움
interface 인터페이스이름 {
fun 메소드이름()
}
| Kolitn | Other Language |
|---|---|
| Class (클래스) | 분류, 범주 |
| Property (프로퍼티) | 속성(Attribute), 변수(Variable), 필드(Field), 데이터(Data) |
| Method (메서드) | 함수(Function), 동작(Operation), 행동(Behavior) |
| Object (객체) | 인스턴스(Instance) |
[참고사이트]
'Kotlin 코틀린의 클래스와 객체', 글 쓰는 개발자
'Use classes and objects in Kotlin', Android Studio
'Vocabulary for Android Basics in Kotlin', Android Developers