얼렁뚱땅
[Kotlin] Class 본문
패스트캠퍼스 강의 [Kotlin] 25~29
클래스란
// 18. Class
// OOP -> Object Oriented Programing (객체지향 프로그래밍)
// "객체"란 뭘까?
// - 이름이 있는 모든 것
// 절차지향 프로그래밍 문제 해결 방법
// - 코드를 위에서 부터 아래로 실행을 하면 문제가 해결된다!
// 객체지향 프로그래밍 문제 해결 방법
// - 객체를 만들어서, 객체에게 일을 시켜서 문제를 해결한다
// - 선수, 심판, 경기장, 관중 -> 축구 게임
// 객체를 만드는 방법
// - framework 가 제공해주지 않는 것을 만들때 객체를 따로 정의해야한다.
// - 객체가 무엇으로 어떻게 만들어지는지 "설명서"가 있어야 한다.
<자바 공부할 때 정리 했던 내용>
- 클래스 -> 설계도
- 인스턴스(=객체 = object) -> 설계도로 제작된 실제 물건
- 클래스 구성 멤버
- 필드(field)
- 메서드(method)
- 생성자(constructor)
- 생성자
- 초기화 할 때 사용
- this는 자신의 class를 가리킨다.
(파라미터 변수와 클래스의 필드의 이름이 같을 경우 구분해주기 위해 사용한다. 만약 this가 없으면 파라미터 변수를 가리킨다.)
- overloading
- 클래스 내에 같은 이름의 메소드를 여러개 선언하는 것
- 하나의 메소드 이름으로 다양한 매개값을 받기 위해 오버로딩을 한다.
- 오버로딩의 조건: 같은 메소드 이름, 파라미터의 개수나 데이터 형식이 달라야함.
- 생성자도 메소드의 일종이므로 메소드 오버로딩이 가능.
클래스(설명서) 만드는 방법
// 클래스(설명서) 만드는 방법(1)
class Car constructor(var engine: String, var body: String) {
}
// 클래스(설명서) 만드는 방법(2)
class SuperCar {
var engine: String
var body: String
var door: String
constructor(engine: String, body: String, door: String) {
this.engine = engine
this.body = body
this.door = door
}
}
// 클래스(설명서) 만드는 방법(3) -> (1)번 방법의 확장
class Car1 constructor(engine: String, body: String) {
var door: String = ""
//생성자
constructor(engine: String, body: String, door: String) : this(engine, body) {
this.door = door
}
}
// 클래스(설명서) 만드는 방법(4) -> (2)번 방법의 확장
class Car2 {
var engine: String = ""
var body: String = ""
var door: String = ""
constructor(engine: String, body: String) {
this.engine = engine
this.body = body
}
constructor(engine: String, body: String, door: String) {
this.engine = engine
this.body = body
this.door = door
}
}
기본적으로 class가 호출 되면 ( ) 이 괄호 내부가 불리는 것이다. ( )가 constructor의 역할을 한다고 봐도 될듯?
1. 2번을 짧게 쓰는 방법이다. (engine, body)
2. 가장 기본 방법 (engine, body, door)
3. engine과 body는 필수이지만 door는 있어도 없어도 상관없는 경우
- 1. engine과 body만 주어졌을 경우: (engine: String, body: String) 이 부분을 통해 인스턴스가 생성된다.
- 2. engine, body, door가 모두 주어졌을 경우: 아래의 constructor 부분을 통해 인스턴스가 생성된다.
- this는 Car1과 동일하다. this를 통해 위의 Car1에게 engine과 body를 넘겨주면서 1번 과정 진행 후, 아래의 this를 통해 door를 넘겨준다.
- door 생성시 기본값이 필요하기 때문에 ""을 넣어준다.
4. engine과 body는 필수이지만 door는 있어도 없어도 상관없는 경우 (3번과 동일한 조건)
- 1. engine과 body만 주어졌을 경우: 첫번째 constructor
- 2. engine, body, door가 모두 주어졌을 경우: 두번째 constructor
===> 결론: 1번과 3번을 사용하면 될 듯
* constructor 키워드를 삭제해도 된다.
클래스(설명서)를 통해서 실체를 만드는 방법
-> 인스턴스화를 통해서 -> 인스턴스(객체)을 얻게 된다.
Car("v8 engine", "big")
// class를 변수에 넣을 수도 있다.
val bigCar = Car("v8 engine", "big")
// 우리가 만든 클래스(설명서)는 자료형이 된다
// 설명서 (1) 사용
val bigCar1: Car = Car("v8 engine", "big")
// 설명서 (2) 사용
val superCar: SuperCar = SuperCar("good engine", "big", "white")
기능(method) 추가하는 방법
// 기능(1)
class RunableCar(engine: String, body: String) {
fun ride() {
println("탑승 하였습니다")
}
fun drive() {
println("달립니다 !")
}
fun navi(destination: String) {
println("$destination 으로 목적지가 설정되었습니다")
}
}
// 기능(2)
class RunableCar2 {
var engine: String
var body: String
constructor(engine: String, body: String) {
this.engine = engine
this.body = body
}
init {
// 초기셋팅을 할 때 유용하다
println("RunableCar2가 만들어 졌습니다")
}
fun ride() {
println("탑승 하였습니다")
}
fun drive() {
println("달립니다 !")
}
fun navi(destination: String) {
println("$destination 으로 목적지가 설정되었습니다")
}
}
1. 간단하게 표기한 것
2. 가장 기본적인 틀
- 객체 생성시 init() 함수가 가장 먼저 호출된다.
기능과 요소 사용하기
// 인스턴스가 가지고있는 기능을 사용하는 방법
val runableCar: RunableCar = RunableCar("simple engine", "short body")
runableCar.ride()
runableCar.navi("부산")
runableCar.drive()
// 인스턴스의 멤버 변수에 접근 하는 방법
val runableCar2: RunableCar2 = RunableCar2("nice engine", "long body")
println(runableCar2.body)
println(runableCar2.engine)
오버로딩(Overloading)
// 오버로딩
// -> 이름이 같지만 받는 파라미터가 다른 함수
class TestClass() {
fun test(a: Int) {
println("up")
}
fun test(a: Int, b: Int) {
println("down")
}
}
main 함수 내부
val testCalss = TestClass()
testCalss.test(1)
testCalss.test(1, 2)
'Android 앱 개발' 카테고리의 다른 글
[UI] UI final 과제 (0) | 2020.12.25 |
---|---|
[UI] Drawable (0) | 2020.12.25 |
[UI] Image View (0) | 2020.12.24 |
[UI] Scroll View (0) | 2020.12.24 |
[UI] Padding, Margin (0) | 2020.12.24 |