블로그를 시작하자 마자~~~~ 코드 투!척 ~_~
// open 을 사용하면 다른 곳에서도 사용 가능
open class Car {
// 속성, 필드
var color : String = ""
var speed : Int = 0
// 생성자 constructor
constructor() { }
constructor(color: String, speed: Int) {
this.color = color
this.speed = speed
}
// 메소드, 기능
open fun upSpeed(value : Int) {
if ((speed + value) >= 200)
speed = 200
else
speed = speed + value
}
fun downSpeed(value : Int) {
if (speed - value < 0)
speed = 0
else
speed = speed - value
}
}
// 상속
class Automobile : Car {
// 속성 부모 : 색상, 스피드
var seatNum : Int = 0
// 생성자
constructor() { }
// 기능, 함수
override fun upSpeed(value : Int) {
if (speed + value >= 300)
speed = 300
else
speed = speed + value
}
}
class Car2 {
var name : String = ""
var color : String = ""
var speed : Int = 0
constructor(name : String, color : String, speed : Int) {
this.name = name
this.color = color
this.speed = speed
}
fun upSpeed(value : Int) {
if ((speed + value) >= 500)
speed = 500
else
speed = speed + value
}
}
fun main() {
var myCar1 : Car = Car("White", 0)
// myCar1.color = "White"
// myCar1.speed = 0
var myCar2 : Car = Car("Blue", 100)
// myCar2.color = "Blue"
// myCar2.speed = 100
println("내 차 1 = " + myCar1.color + ", " + myCar1.speed)
myCar2.upSpeed(70)
println("내 차 2 = " + myCar2.color + ", " + myCar2.speed)
var automycar : Automobile = Automobile()
automycar.upSpeed(289)
println("내 승용차의 속도는 " + automycar.speed)
var myCar3 : Car2 = Car2("테슬라", "Green", 400)
myCar3.upSpeed(20)
println("내 차 3 = " + myCar3.name + ", " + myCar3.color + ", " + myCar3.speed)
}
오늘 Kotlin 시간에서는 상속에 대해서 배웠습니당. 자바와 비슷해서 신기했던 점도 있었어유~
우선 open 을 작성해 줘야 다른 곳에서도 사용이 가능하다는 것을 배웠습니다.
color 와 speed 는 속성, 즉 필드이며 생성자는 기본 생성자와 color, speed 두 개의 매개변수를 받는 생성자를 만들어 주었답니당.
메소드는 speed 를 올리는 upSpeed 메소드와 speed 를 내리는 downSpeed 를 생성해 주었습니다.
다음은 Car 클래스를 상속 받은 Automobile 클래스를 생성해 주었습니다.
그리고 override 기능을 통해 부모의 메소드를 재정의할 수 있습니닷!!
그래서 이 override 기능을 통해 클래스는 부모보다는 더 나은 기능을 사용하기 위해 upSpeed 에서 숫자를 200 -> 300 으로 변경해줄 수 있습니당.
Car2 클래스는 name, color, speed 를 필드로 받으며 이 세 개를 받는 생성자를 가지고 있고 upSpeed 라는 메소드가 있는 클래스입니닷.
이제 main 부분에서 각 클래스에 해당하는 클래스를 만들어 줍니다. 그리고 괄호 옆에 해당하는 매개변수의 값을 채워서 넣어줍니당.
출력할 때는 myCar1.color 이런 형식으로 작성해 줘야 합니당.
메소드에서도 걱정할 것 없이 지정한 타입에 맞는 값을 괄호 안에 넣어주시면 됩니당.
너무 쉽죠?! 게다가 Java 와 다른 부분이 거의 없고 open 이나 변수를 선언하는 부분들만 달랐기 때문에 이는 코드를 많이 작성해 보고, 적응하는 것이 좋다고 생각해욤!
fun main() {
val add = {x:Int, y:Int -> x + y}
val result3 = add(2, 3)
val result4 = add(6, 7)
println(result3)
println(result4)
val mul = {x:Int, y:Int -> x * y}
println(mul(2, 3))
println(mul(4, 5))
val minus = {x:Int, y:Int -> x - y}
println(minus(2, 3))
println(minus(40, 5))
val greeting = fun(){println("Hello")}
val result = greeting()
print(result)
val greeting2 = {name : String, age : Int -> "Hello. My name is $name. I am $age years old"}
val result2 = greeting2("dongyang", 20)
print(result2)
}
이것은 람다 형식으로 지정된 함수입니다!!!!!!
람다 형식이란 ... -> (화살표)를 사용해서 함수를 간단하게 나타내는 것입니당.
val add = {x:Int, y:Int -> x + y} 이렇게 말이죠~ 아주아주 간단하게 나타낼 수 있습니당.
val greeting2 = {name : String, age : Int -> "Hello. My name is $name. I am $age years old"}
그리고 이렇게 $변수이름 으로도 사용할 수 있습니다.
그럼 함수 호출문에서 값을 넣어주면 해당 형식의 문장에 지정해준 값이 삽입되어 출력돼요!!!!!!!!!!!!
진짜 신기한 것 같습니다. ㅎ OwO
package com.example.app2
import android.os.Bundle
import android.widget.Button
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
class MainActivity : AppCompatActivity() {
// AppCompatiActivity() 상속
override fun onCreate(savedInstanceState: Bundle?) {
// 부모의 것을 재정의 하겠다.
super.onCreate(savedInstanceState)
// 부모의 onCreate 를 가리킴
enableEdgeToEdge()
// this 생략 (나 자신) = this.enableEdgeToEdge()
setContentView(R.layout.activity_main)
// this 생략
var btn : Button = findViewById(R.id.button1);
// 선언 btn 은 Button 타입
// id 를 통해서 찾는데 button1 이라는 아이디를 찾는다.
btn.setOnClickListener {
Toast.makeText(applicationContext, "버튼클릭~~~~~", Toast.LENGTH_SHORT).show()
}
// btn 이라는 버튼을 클릭했을 때
// Toast 는 톡하고 튕기는 거
// 객체를 안 만들어도 사용할 수 있음
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
}
}
이는 Kotlin 프로젝트를 처음 실행했을 때 뜨는 MainActivity.kt 코드입니당.
오늘은 이 코드를 해석하기 위해 노력하였습니당.
class MainActivity : AppCompatActivity() {
우선 이 부분에서는 상속 관계!!! 라는 것을 알 수 있죠? 위에서 배웠던 것처럼~
MainActivity 라는 파일이 AppCompatActivity 라는 파일을 상속 받았습니닷.
override fun onCreate(savedInstanceState: Bundle?) {
여기서는 override 기능을 통해 부모의 onCreate 을 재정의하였습니당~
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
그리고 여기서 super. 은 부모의 onCreate 를 가리키고 있습니당.
그리고 클래스 자기 자신을 가리킬 때는 this 를 사용합니다. 하지만 이는 생략할 수 있기 때문에 여기서는 생략하였습니다!
var btn : Button = findViewById(R.id.button1);
// 선언 btn 은 Button 타입
// id 를 통해서 찾는데 button1 이라는 아이디를 찾는다.
btn.setOnClickListener {
Toast.makeText(applicationContext, "버튼클릭~~~~~", Toast.LENGTH_SHORT).show()
}
// btn 이라는 버튼을 클릭했을 때
// Toast 는 톡하고 튕기는 거
// 객체를 안 만들어도 사용할 수 있음
그리고 제가 activity_main.xml 에서 미리 버튼 두 개를 만들어 뒀는데요 그 버튼의 아이디를 button1 이라 지정을 해 뒀습니당.
그 아이디 button1 의 값을 Button 타입의 btn 으로 가져옵니닷.
그리고 이 버튼을 클릭하였을 때 "버튼 클릭~~~~~" 이라는 문장이 뜨게 됩니닷.
Toast 는 static 이기 때문에 객체를 생성하지 않아도 사용할 수 있어요!
다음 코드부터는 아직 공부하지 않아서 미작성입니다. . .
그리고 아직 Toast 코드 부분도 제대로 공부하지 못하였습니다 ㅠ-ㅠ
다음 Koltin 5차시 때는 더 자세한 블로그 글로 돌아올게여~
상속에 대해 마스터를 하고 계시길 바랍니닷.~!
다음 번에는 돌고 돌지 않는 대화로 돌아오겠습니닷. ㅎ^ㅎ 감사합니당.
즐거운 추석 연휴 보내세여!!!!!!!!! ^o^
'레쭈고 코틀린' 카테고리의 다른 글
Kotlin 6차시 (3) | 2024.09.27 |
---|---|
Kotlin 5차시 (0) | 2024.09.26 |
Kotlin 3차시 (1) | 2024.09.06 |
Kotlin 2차시 (1) | 2024.09.04 |
Kotlin 1차시 (1) | 2024.08.29 |