이 글은 이것이 안드로이드다 with 코틀린(개정판)를 참고하여 작성하였습니다.
작성자 : 조유리
개발환경은 Windows, Android Studio입니다.
1. OOP
객체 지향 프로그래밍(영어: Object-Oriented Programming, OOP)
1) 변수, 타입
2) 흐름 제어 : 조건이 맞을 시에 실행, loop 가능
3) 함수 : 코드를 쉽게 나누게 해줌, 필요할 때 다시 사용 가능
4) collection
5) class, object
2. 클래스
class : 속성, 기술을 정의해주는 청사진 (붕어빵 틀)
object : class를 통해 생산한 한 대의 차 (붕어빵)
① 클래스 선언
class Person{}
/*
대문자로 시작
가시성 변경자를 붙이지 않으면, 기본으로 public
*/
val myPerson = Person() //new 키워드 사용하지 않고 선언
② 생성자, 부생성자
//하나의 주 생성자(primary constructor), 여러 개의 부 생성자(secondary constructor) 사용가능
class Person constructor(name:String, age:Int){
val name:String = name
val age:Int = age
}
//주 생성자에 파라미터 val 또는 var 키워드를 추가하면 파라미터에 상응하는 프로퍼티가 자동으로 생성된다.
class Person (val name:String, val age:Int =25){} //디폴트값 정의
val myPerson1 = Person("김가나", 20)
val myPerson2 = Person("박다라")
/*
부 생성자:
주 생성자를 상속받는 구조, 반드시 주 생성자가 가지고 있는 인자를 가지고 있어야 한다.
var, val 키워드 사용 불가
*/
class Person (val name: String){
var age : Int = 20
constructor(name: String, age : Int) : this(name){ //this 키워드를 이용하여 주 생성자 호출
this.age = age
}
}
③ 초기화 블록
class Person (val name: String, val age: Int = 25){
val address : String = ""
init {
println("주 생성자 초기화 블록")
}
constructor(name : String, age : Int, address : String) : this(name, age){
println("부 생성자")
}
}
fun main(){
val myPerson = Person("김가나",25,"GDSC")
}
/*
(출력)
주 생성자 초기화 블록 (init 블록이 먼저 호출)
부 생성자 (부 생성자 호출)
*/
3. 늦은 초기화와 게터, 세터
/*
늦은 초기화 사용
프로퍼티 선언과 동시에 초기화 하지 않아도 된다.
*/
lateninit var owner : String
setter : 외부에서 메소드를 통해 데이터에 접근하면, 메소드는 매개값을 검증해서 유효한 값만 데이터로 저장할 수 있다.
getter : 데이터 복사본을 던져주기 때문에 원래 객체의 데이터를 손상시키지 않는다. 따라서 원본 데이터는 안전하다.
//수정 전의 default 모습
class Car(_brand: String, _model: String, _maxSpeed: Int) {
val brand: String = _brand //val -> 수정 불가능(immutable), getter만 가능
get() = field
var model: String = _model
get() = field
set(value) {
field = value
}
var maxSpeed: Int = _maxSpeed
get() = field
set(value) {
field = value
}
}
//수정
class Car() {
lateinit var owner : String //lateinit -> 나중에 지정해주겠다
val myBrand: String = "BMW"
// 수정한 getter
get() {
return field.toLowerCase() //받아서 소문자로 반환
}
// default setter and getter
var myModel: String = "M5"
private set
var myMaxSpeed: Int = maxSpeed
get() = field
// 수정한 Setter
set(value) {
field = if(value > 0) value else throw IllegalArgumentException("_maxSpeed must be greater than zero")
}
init{
this.myModel = "M3"
this.owner = "Frank"
}
}
4. data class
data class Person(var name: String, var age: Int, var gender: String)
제한 사항) 상속을 지원하지 않는다.
기본 생성자에 최소 하나의 파라미터가 있어야 한다.
기본 생성자의 파라미터는 val, var
abstract, open, sealed, inner와 같이 사용 불가
제공하는 메소드) toString(), hashCode(), equals(), copy(), componentN()
'GDSC HUFS 4기 > Kotlin Team #7' 카테고리의 다른 글
[7팀] 계산기 -xml 사용법과 UI 생성 배우기 part 2 (0) | 2022.10.31 |
---|---|
[7팀] 계산기 - XML 사용법과 UI 생성법 배우기 - 안드로이드12 (0) | 2022.10.31 |
[7팀]코틀린 기초 더 배우기(2) (0) | 2022.10.11 |
[7팀]코틀린 기초 더 배우기(1) (0) | 2022.10.10 |
[7팀] 코틀린 객체지향 프로그래밍 기초(2) (0) | 2022.10.09 |