이 글은 udemy 강의를 참고하여 작성하였습니다.
작성자 : 안동현
개발환경은 Windows, Android Studio입니다.
🥰 Section 7 - (1) : Kotlin - Object Oriented Programming : https://gdschufs.tistory.com/20
[4팀] Section 7 - (1) : Kotlin - Object Oriented Programming
이 글은 udemy 강의를 참고하여 작성하였습니다. 작성자 : 안동현 개발환경은 Windows, Android Studio입니다. 1. Kotlin의 함수 fun 키워드를 사용하여 함수를 선언하며, 괄호() 안에는 함수의 매개 변수를
gdschufs.tistory.com
1. Kotlin의 접근 제한자 : Visibility Modifier
접근 제한자란 클래스의 멤버를 외부의 어느 범위까지 이용하게 할 것인지를 결정하는 키워드입니다.
접근 제한자 | 최상위에서 이용 | 클래스 멤버에서 이용 |
public | 모든 파일에서 가능 | 모든 클래스에서 가능 |
internal | 같은 모듈 내에서 가능 | 같은 모듈 내에서 가능 |
protected | 사용 불가 | 상속 관계의 하위 클래스에서만 가능 |
private | 파일 내부에서만 이용 | 클래스 내부에서만 이용 |
open class Super { // open : 뒷 내용에서 설명
var publicNum = 10
protected var protectedData = 20
private var privateData = 30
}
class Sub: Super() {
fun increaseNum () {
publicNum++ // Success!
protectedNum++ // Success!
privateNum++ // Error!
}
}
fun main() {
val obj = Super() // Success!
obj.protectedNum++ // Error!
obj.privateNum++ // Error!
}
2. Kotlin Constructor : Primary & Secondary
Kotlin의 클래스는 생성자를 주 생성자(Primary Constructor)와 보조 생성자(Secondary Constructor)로 구분합니다.
한 클래스 안에 주 생성자만 선언할 수도 있고, 보조 생성자만 선언할 수도 있습니다.
물론 둘 다 선언할 수도 있죠.
* 주 생성자 : Primary Constructor
// 주 생성자 선언
class CustomClass constructor() {
}
주 생성자는 constructor 키워드로 클래스 선언부에 선언합니다.
주 생성자 선언은 필수는 아니며, 한 클래스에 하나만 가능합니다.
주 생성자를 선언할 때, constructor 키워드는 생략할 수 있습니다.
// constructor 키워드 생략 예
class CustomClass() {
}
만약 개발자가 클래스의 주 생성자를 선언하지 않으면,
컴파일러가 매개변수가 없는 주 생성자를 자동으로 추가합니다.
// 매개변수가 없는 주 생성자 자동 선언
class CustomClass {
}
주 생성자를 선언할 때 필요에 따라 매개변수를 선언할 수도 있습니다.
// 주 생성자의 매개변수
class CustomClass(name: String, age: Int) {
}
* 보조 생성자 : Secondary Constructor
보조 생성자는 클래스의 본문에 constructor 키워드로 선언하는 함수입니다.
클래스 본문에 선언하므로 여러 개를 추가할 수 있는 것입니다.
// 보조 생성자
class Person {
constructor(name: String) {
println("constructor(name: String) call...")
}
constructor(name: String, age: Int) {
println("constructor(name: String, age: Int) call...")
}
}
fun main() {
val person1 = Person("An")
val person2 = Person("An", 22)
}
Kotlin에서 클래스를 선언할 때 주 생성자와 보조 생성자 중 하나만 선언하면 문제가 없지만,
만약 주 생성자와 보조 생성자를 모두 선언한다면 반드시 생성자끼리 연결해주어야 합니다.
보조 생성자는 객체를 생성할 때 호출되며,
이때 클래스 내에 주 생성자가 있다면 this() 구문을 이용해,
주 생성자를 호출해야 합니다.
// 보조 생성자 사용할 때 주 생성자 불러오기
class Person(name: String) {
constructor(name: String, age: Int): this(name) {
// ...
}
}
fun main() {
val person = Person("An", 22)
}
주 생성자가 있는 상태에서 보조 생성자를 여러 개 선언한다면,
보조 생성자에서 this()로 다른 보조 생성자를 호출할 수도 있습니다.
그런데, 이때에도 보조 생성자로 객체를 생성한다면 어떤 식으로든 주 생성자가 호출되게 해야 합니다.
// 여러 개의 보조 생성자
class Person(name: String) {
constructor(name: String, age: Int): this(name) {
// ...
}
constructor(name: String, age: Int, email: String): this(name, age) {
// ...
}
}
fun main() {
val person = Person("An", 22, "donghyun@.com")
}
3. Kotlin Inheritance
클래스를 선언할 때 다른 클래스를 참조해서 선언하는 것을 상속 : Inheritance라고 합니다.
open class Super { // 상속할 수 있게 open 키워드 이용
}
class Sub: Super() { // Super를 상속받아 Sub 클래스 선언
}
상위 클래스 : 상속 대상이 되는 클래스
하위 클래스 : 상속받는 클래스
Kotlin의 클래스는 기본적으로 다른 클래스가 상속할 수 없게 되어 있으므로,
상속할 수 있게 선언하려면 open 키워드를 사용합니다.
* 재정의 : Override
상속이 주는 최고 이점은 상위 클래스에 정의된 멤버(변수, 함수)를
하위 클래스에서 자신의 멤버처럼 사용할 수 있다는 것입니다.
// Override 예제
open class Super {
open var data = 10
open fun customFunc() {
println("I'm Super Class function : $data")
}
}
class Sub: Super() {
override var data = 20
override fun customFunc() {
println("I'm Sub Class function : $data")
}
}
fun main() {
val obj = Sub()
obj.customFunc()
}
// 실행 결과는?
// I'm Sub Class function : 20
4. Kotlin Polymorphism and Abstraction
* 같은 모양의 코드가 다른 기능을 하도록 만들 수 있는 특징 (Override 등)
* Overloading vs Overriding
Overloading은 이름은 같은 method지만, 매개변수 등을 다르게 해서 계속해서 재정의해서 사용하는 것을 말합니다.
* 추상 클래스 : Abstract Class
구현할 필요가 없거나, 아직 구현할 수 없기에 선언만 된 추상 method로 이루어진 클래스입니다.
추상 클래스는 아직 method가 구현되어있지 않기 때문에 객체 생성을 할 수 없습니다.
따라서, 반드시 상속을 받는 자식 클래스를 필요로 합니다.
추상 클래스는 abstract 키워드와 함께 선언부만 작성합니다.
// 추상 클래스 선언
open abstract class AbstractClass {
open abstract fun abstractMethod()
}
class Sub : AbstractClass() {
override fun abstractMethod() {
println("implement abstract method here!")
}
😀 추상 method는 자식 클래스에서 override 해서 사용할 수 있습니다.

'GDSC HUFS 3기 > Android with Kotlin Team 4' 카테고리의 다른 글
[4팀] 11. (2) Kotlin을 위한 기본 문법 : 화면에 그려지는 디자인 요소 위젯 (0) | 2021.10.29 |
---|---|
[4팀] 11. (1) Kotlin을 위한 기본 문법 : 스코프 함수 (0) | 2021.10.26 |
[4팀] Section 7 - (1) : Kotlin - Object Oriented Programming (0) | 2021.10.05 |
[4팀] Section 6 : Kotlin - Decisions and Loops (2) | 2021.10.04 |
[4팀] Section 5 : Kotlin - Variables, Operators and Expressions (0) | 2021.10.04 |