JAVA 를 베이스로 한 코틀린을 예시코드 통해 학습 해봅시다!
● loop 반복문 설정(continue에서도 사용 가능)
fun main() {
// 코틀린은 loop 를 통해 탈출하고자 하는 반복문의 위치를 설정할 수 있다
loop@for(i in 1..10){
for(j in 1..10){
if(i == 1 && j == 2) break@loop
println("i : $i, j : $j")
}
}
}
● 클래스 기본 구조
fun main() {
var a = Person("박보영",1990)
var b = Person("전정국",1997)
var c = Person("장원영",2004)
a.introduce()
b.introduce()
c.introduce()
}
// 클래스 속성을 등록할 때에는 (var 변수명:타입) 형식으로 선언
class Person(var name:String, val birth:Int){
fun introduce(){
// ${} 를 통해 값을 println에 넣을 수 있습니다.
println("안녕하세요, 나는 ${birth} 년생 ${name} 입니다. ")
}
}
● init && constructor
- init : 생성자를 통해 인스턴스가 만들어질 때 호출되는 함수
- constructor : 기본생성자와 다른 형태의 생성자를 제공하여 인스턴스 생성시 추가적인 기능을 제공하는 역할
기본 생성자를 통해 속성 초기화가 필요하며 해당 클래스를 다른 방식으로 쓴다고 보면 됨
자바의 오버로딩 방식과 비슷하다고 보면 됨
fun main() {
var a = Person("박보영",1990)
var b = Person("전정국",1997)
var c = Person("장원영",2004)
var d = Person("이루다")
var f = Person("차은우")
var g = Person("류수정")
}
class Person(var name:String, val birth:Int){
// init 함수는 생성자를 통해 인스턴스가 만들어질 때 호출되는 함수
init{
println("안녕하세요, 나는 ${birth} 년생 ${name} 입니다. ")
}
// 보조생성자
// 기본생성자와 다른 형태의 생성자를 제공하여
// 인스턴스 생성시 추가적인 기능을 제공하는 역할
// 기본 생성자를 통해 속성 초기화 필요!!
// 해당 클래스를 다른 방식으로 쓴다고 보면 됨
// 오버로딩 방식과 비슷하다고 보면 됨
constructor(name:String) : this(name, 1997){
println("보조생성자 생성")
}
}
● 상속
- 상속이 필요한 상황은 두가지!
1. 이미 존재하는 클래스를 확장하여 새로운 속성이나 함수를 추가한 클래스를 만들어야 할 때
2. 여러개의 클래스를 만들었을 때 클래스의 공통점을 뽑아서 정리할 때
- 상속의 조건
1. 서브클래스는 슈퍼클래스에 존재하는 속성과 같은 이름의 속성을 가질 수 없음
2. 서브클래스가 생성될 때에는 반드시 슈퍼클래스의 생성자까지 호출되어야 함
// 상속이 필요한 상황은 두가지!
// 1. 이미 존재하는 클래스를 확장하여 새로운 속성이나 함수를 추가한 클래스를 만들어야 할 때
// 2. 여러개의 클래스를 만들었을 때 클래스의 공통점을 뽑아서 정리할 때
// 물려주는 쪽이 슈퍼 클래스
// 물려 받는 쪽이 서브 클래스
fun main() {
var a = Animal("별이", 5, "개")
var b = Dog("별이", 5)
a.introduce()
b.introduce()
b.bark()
var c = Cat("루이", 7)
c.introduce()
c.meow()
var d = nameA(30, "human")
d.introduce()
d.hello()
}
// 코틀린은 상속 금지가 기본 값
// 코틀린은 open 설정을 통해 상속을 할 수 있음!
open class Animal(var name:String, var age:Int, var type:String){
fun introduce(){
println("저는 ${type} ${name} 이고, ${age} 살 입니다.")
}
}
// 상속의 조건
// 1. 서브클래스는 슈퍼클래스에 존재하는 속성과 같은 이름의 속성을 가질 수 없음
// 2. 서브클래스가 생성될 때에는 반드시 슈퍼클래스의 생성자까지 호출되어야 함
// 현재 Animal이 슈퍼클래스, Dog가 서브 클래스
class Dog (name:String, age:Int) : Animal(name, age, "개"){
fun bark(){
println("멍멍")
}
}
class Cat(name:String, age:Int) : Animal(name, age, "고양이"){
fun meow(){
println("야옹야옹")
}
}
class nameA(age:Int, type:String) : Animal("A", age, type){
fun hello(){
println("hello")
}
}
● 오버라이딩
이미 구현이 끝난 함수의 기능을 서브클래스에서 재구현 해줘야 할 때 사용
클래스 내부에서도 open을 fun 앞에 붙히면 오버라이딩 가능
Animal 클래스에서 open 으로 eat을 열어줘서 override 가능
fun main() {
var t = Tiger()
t.eat()
}
open class Animal{
// 클래스 내부에서도 open을 fun 앞에 붙히면 오버라이딩 가능
open fun eat(){
println("음식을 먹습니다.")
}
}
class Tiger : Animal(){
// Animal 클래스에서 open 으로 eat을 열어줘서 override 가능
override fun eat(){
println("고기를 먹습니다")
}
}
● 추상화
형식만 선언하고 실제 구현은 서브클래스에서 일임할 때 사용(구현부는 값을 내뱉는 return 이라고 보면됨)
선언부만 있고 기능이 구현되지 않은 추상함수
추상함수를 포함하고 있는 추상 클래스로 구성
fun main() {
var r = Rabbit()
r.eat()
r.sniff()
}
// 추상화
// 선언부만 있고 기능이 구현되지 않은 추상함수
// 추상함수를 포함하고 있는 추상 클래스로 구성
abstract class Animal{
abstract fun eat()
fun sniff(){
println("킁킁")
}
}
class Rabbit : Animal(){
override fun eat(){
println("당근을 먹습니다")
}
}
출처
코틀린 - https://play.kotlinlang.org/
디모의 Kotlin 강좌 - https://www.youtube.com/watch?v=8RIsukgeUVw&list=PLQdnHjXZyYadiw5aV3p6DwUdXV2bZuhlN&index=1&pp=iAQB
'개발지식' 카테고리의 다른 글
Kotlin 기본 구조(예시 코드) (8) | 2025.08.14 |
---|---|
Kotlin 기본 함수(예시 코드) (7) | 2025.08.12 |
포트포워딩(port forwarding)으로 내부망 PC 접근하기(포트포워딩 설정방법) (4) | 2025.07.28 |
(JPA) mappedBy 완벽 이해! (8) | 2025.07.26 |
(JPA) 연관관계 매핑 (4) | 2025.07.25 |