[안드로이드 ] 코틀린 문법 빠르게 살펴보기
문법 사용하기 위해서는
Kotiln 창이 따로 만들어 쓸수 있다.
Android 창에서 코틀린 창 열수있다
문법 기초
변수 선언
val 은 상수이고 var 은 변수이다
val pi : Double = 3.14
기본 자료형
자료형 | 크기 |
---|---|
Byte | 1Byte |
Short | 2Byte |
Int | 4byte |
Long | 8byte |
자료형 | 크기 |
---|---|
Double | 8Byte |
Float | 4Byte |
Float 형으로 지정시 값 뒤에 F 추가해야한다.
val numDouble : Double =3.2
val numFloat : Float = 3.2f
자료형 | 크기 |
---|---|
vhar | 문자 |
String | 문자열 |
val char1 : Char ='b'
val String1 : String = "hell"
| 자료형| 크기 | |:—- :|:—- :| |Boolean| true,false |
배열 문자열
배열 문자는 Array<자료형> 으로 선언하고 arrayOf 하는 함수로 만든다자료형>
val stringArray : Array<String> = arrayOf("apple","banana")
val intArray = arrayOf(1,32,3)
println(stringArray[0])
함수
함수 기본형태는 다음과 같다
fun 함수명 (매개변수) : 반환 자료형 {
// 실행할 코드
}
다음 예시로 보여주고 Unit은 값을 반환할게 없다는 의미이다
fun printage(age :Int) : Unit {
println(age)
}
printage(10)
문자열 템플릿
변수 문자열을 만들때에는 $ 붙여서 사용이 가능하다 변수가 많아진다면 ${} 묶어서 사용이 된다.
val prince =3000
val tax = 300
val message = "temp $prince"
println(message)
제어문
범위 클래스
Int Range, LongRange,CharRange 이 있고 예시로 다음과 같이 사용이 된다.
val numRange : IntRange = 1..5
println(numRange.contains(3))
for문
//정방향
for (i in 1..5){
println(i)
}
// 역방향
for(i in 5 downTo 1){
println(i)
}
// 간격 조정
for(i in 1..5 step 2){
println(i)
}
인덱스와 함계 출력하기 위해서는 withIndex() 함수를 이용한다
val stuents = arrayOf("a","b","c")
for ((index, name) in stuents.withIndex()){
println("$index and $name")
}
while 문
var num = 1
while (num<5){
println(num)
num++
}
num =1
do {
num++
println(num)
}while(num <5)
if 문
val examscore =50
var ispass = false
if(examscore < 50)
{
ispass = true
}
println ("시힘 결과 : $ispass")
when 문
val weather = 15
when(weather){
-20 ->{
println("추운 날시")}
11,12,13,14 -> {println("적당한 날씨")}
in 15 .. 27 -> {println("정답")}
!in -30..50 -> {println("오류")}
else -> {println("오류 2")}
}
컬렉션
리스트
읽고 쓰기 모두 가능한 리스트
val numImmutableList = listOf(1,2,3) //읽기 정용
val numMutableList = mutableListOf(1,2,3) //읽고 쓰기 가능
셋 (set)
중복되지 않는 요소 만들떄 사용
val immutableSet = setOf(1,2,3,1,2,3)
val mutableSet = mutableSetOf(1,2,3,4,1,2,3)
맵 (map)
맵은 키와 값을 짝지어 저장하는 자료구조입니다. 키는 중복되지 않아야 합니다.
클래스
class Car
// 프로퍼티란 속성을 뜻한다
val car = Car("Red")
println("Sample ${car.color}")
클래스 생성자
- 주생성자
클래스 이름 옆에 괄호로 둘러 쌓인 코드 를 주생성자라고 한다.
아래 <h2 style ="color:Tomato" >constructor(name:String){}</h2>
constructor 은 생략이 가능하다
class Person constructor(name:String){} class Person (name:String){} class Person (val name:String){} // 생성된 입력값을 프로퍼티에 할당
- 보조 생성자 주 생성자와 다르게 클래스 바디 내부에서 constructor 키워드를 이용하여 만듬
class Person{
constructor(age :Int){
println("age is $age")
}
}
// 주 생성자가 존재할 떄는 반드시 this 키워드를 통해 주 생성자를 호출
class Person(name : String){
constructor(name : String, age :Int) : this(name){
println("age is $age")
}
}
- 초기화 블록 객채 생성 시 필요한 작업을 하는 부분
class Person(name : String){
val name : String
init {
if(name.isEmpty()){
thorow IllegalArgumentException("이름 없어요")
}
this.name = name
}
}
클래스의 상속
부모클래스에 open 키워드를 추가해야합니다. 메서드도 자식 클래스에 오버라이드 할려면 부모클래스의 매서드에 open 키워드를 추가해야합니다.
open class Flower{
open fun waterFlower(){
println("water Floddwer")
}
}
class Rose : Flower(){
override fun waterFlower() {
super.waterFlower() //Flower 클래스의 매서드 먼저 실행
println("rose is happyddd")
}
}
val rose = Rose()
rose.waterFlower()
접근 제한자
이름 | 정의 |
---|---|
public | 코틀린의 기본 접근 제한자 |
internal | 같은 모듈내 접금 |
protected | 자식 클래스에서는 접근 |
private | 클래스 내부에서만 접근 |
컴페니언 객체 companion
정의된 변수나 매서드들은 객체를 만들지 않고 접근
class MyClass {
companion object {
val myProperty: String = "Hello, World!"
fun myFunction() {
println("This is a companion object function.")
}
}
}
fun main() {
println(MyClass.myProperty) // "Hello, World!" 출력
MyClass.myFunction() // "This is a companion object function." 출력
}
추상 클래스
객체를 만들 수 없는 클래스
abstract class Animal(val name: String) {
abstract fun makeSound() // 추상 함수
fun sleep() {
println("$name is sleeping.")
}
}
class Dog(name: String) : Animal(name) {
override fun makeSound() {
println("$name says: Woof!")
}
}
class Cat(name: String) : Animal(name) {
override fun makeSound() {
println("$name says: Meow!")
}
}
fun main() {
val dog = Dog("Buddy")
val cat = Cat("Whiskers")
dog.makeSound() // "Buddy says: Woof!" 출력
cat.makeSound() // "Whiskers says: Meow!" 출력
dog.sleep() // "Buddy is sleeping." 출력
cat.sleep() // "Whiskers is sleeping." 출력
}
# 데이터 클래스
data class memo (val title : String, val content: String)
val memo1 = memo("제목", content = "내용")
val memo1 = memo("제목", content = "내용")
val memo2 = memo1.copy(content = "변경")
println(memo1.toString()) //제목 내용
println(memo2.toString()) // 제목 변경
# 인터 페이스
클래스들이 같은 기능을 수행하게끔 강제하는것
interface Animal {
fun makeSound()
}
class Dog : Animal {
override fun makeSound() {
println("Woof!")
}
}
class Cat : Animal {
override fun makeSound() {
println("Meow!")
}
}
fun main() {
val dog: Animal = Dog()
val cat: Animal = Cat()
dog.makeSound() // "Woof!" 출력
cat.makeSound() // "Meow!" 출력
}
댓글남기기