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