기본 코틀린 문법

  • 함수만으로 출력가능
fun main(){
println("안드로이드를 위한 코틀린 연습")
}

main()
  • 변수 선언
fun main(){
var var1 : Int =10
var var2 : Float = 10.1f
var var3 : Double = 10.2
var var4 = '안'  <- 데이터 형식 생략가능 (암시적 선언)
var var5 = "안드로이드"
println(var1)
println(var2)
println(var3)
println(var4)
.
.
}

변수 선언 방식

var(variavle)

  • 일반선언할때사용
  • 필요할 때마다 계선 다른 값대입 가능

val(value)

  • 변수 선언과 동시게 값을 대입하거나, 초기화 없이 선어한후에 한번만 값을 대입가능
  • 한번선언후 값을 변경할수없다

형 변환

  • 캐스팅 연사자 사용
  • tolnt(),toDouble()등의 정적 메소드 사용
문자형100을 정수형으로 변환
var a : Int = "100".tolnt()

null 사용

  • 기본적으로 코틀린은 기본적으로 null값을 넣지 못함
  • 변수선언 때 데이터 형식 뒤에 ?를 붙여야 null 대입가능

null이 아니라고 표시는 !!로나타냄

if,when

if문은 java와 같음

if(조건문){
true 일때 여기 실행
}
else{
false일때 여기 실행
}

< 간결문 >

if(조건문)
true일때
else
false일때

when 문

  • java의 switch문의 역활을 함
  • 여러 가지 경우에 따라서 어떤 작업을 할 것인지를 결정
  • 다중 분기라고도 부름

when(식){
값1-> 값이 1이면 실행
값2-> 값이 2이면 실행
.
.
.
else->어디에도 행당하지 않으면 실행
}

 var count : Int = 85
 var jumsu : Int = (count /10)*10
    when(jumsu) {
        100 -> println("when문 : 합격(장학생)")
        90 -> println("when문 : 합격(장학생)")
        80, 70, 60 -> println("when문 : 합격")
        else -> println("when문 : 불합격")
    }
  • when문의 다른 방식
.. 을사용하여 범위지정
var jumsu : Int = count
when(jumsu) {
       in 90 .. 100 -> ("when문 : 합격(장학생)")
       in 60 .. 89 ->("when문 : 합격")
       else -> println("when문 : 불합격")
   }

배열

1.일차원 배열
-선언
var 배열명=Array <데이터 형식>(개수,{초기값})
-값 대입
var one = Array< Int>(4,{0})
one[0]=10
one[3]=20

2.이차원 배열
-선언
var 배열명 = Array<데이터 형식>(행개수,{배열 데이터 형식(열개수)})
-값 대입
var two = Array< IntArray >(3,{IntArray(4)})

  • 배열 선언하면서 값 대입가능
    var three : IntArray = intArrayOf(1,2,3)

  • ArrayList
    var one = ArrayList< Int>(4)
    one.add(10)
    one.add(20)
    var hap=one.get(0) + one.get(1)

for,while 문

for(변수 in 시작..끝 step 증가량){
//반복문
}

or

for(변수 in 배열명.indices){
//반복문
}

while(조건식){
//조건식이 true인 동안이 부분 실행
}

fun main1(){
    var one : IntArray = intArrayOf(10,20,30)
    //indices = 배열의 index
    for (i in one.indices){
        println(one[i])
    }
    for (value in one){
        println(value)
    }
    // 변수 in 시작..끝 step 증가량
    var two : Array<String> = arrayOf("하나","둘","셋")
    for (i in 0..2 step 1){
        println(two[i])
    }
    var k : Int = 0
    while (k< two.size){
        println(two[k])
        k++
    }
}

메소드와 변수(전역변수,지역변수)

//전역변수
var myVar : Int = 100
	fun main(){
    //지역변수
 	var myVar : Int = 0
 	println(myVar)
 
	 var sum : Int = addFunction(10,20)
	 println(sum)
 
 }
 
 fun addFunction(num1: Int ,num2 : Int): Int{
 	var hap : Int
 	hap = num1 + num2 + myVar
    return hap
    
 }

< 참고 >
매개변수 구분

  • -Call-by-Value
    단순히 실 매개변수를 형식 매개변수에 복사함으로 구현한다.
    함수가 실행 중 매개변수 값이 변경하여도 변경 되지 않는다.
  • -Call-by-reference
    참조에 의한 호출, 주소 값을 인자로 전달하는 호출 방식을 말한다.
    주소 값을 인자로 전달하기에 값 변경 시 ,실 매개변수의 원본 값이 변경 됨

클래스,인스턴스

  • 클래스는 여러번 사용하기 위해 생성
  • 변수와 메소드로 구성
클래스 생성
class Car{
	var color = ""
    var speed = 0
    
    fun upSpeed(value: Int){
    	if (speed + value>=200)
        	speed=200
         else
         	speed = speed-value
     }
  }
  
  인스턴스생성(myCar1,myCar2)
  fun main(){
  	var myCar1 : Car = Car()
    myCar1.color = "빨강"
    myCar1.speed = 0
    
    var myCar2 : Car = Car()
    myCar2.color = "파랑"
    myCar2.speed = 0
   }
   
   main()

생성자

constructor로 생성

constructor(color : Stirng, speed: Int){
	this.color = color
    this.speed = speed
 }
 

메소드 오버로딩

  • 한 클래스안에 같은이름의 메소드가 있어도 파라미터의 개수나 데이터 형식만 다르면 여러개를 선언할수있다
constructor(color : Stirng, speed: Int){
	this.color = color
    this.speed = speed
 }
 
 constructor(speed : Int){
 	this.speed = speed
 }
  
  constructor(){
  
 }
 

static = 공유

  • companion object{}안에 작성
companion object{
	var carCount : Int=0
    //const = final같음
    const val MAXSPEED : Int=200
    const val MINSPEED : Int=0
    
    fun currentCarCount():Int {
    	return carCount
       }
    }

상속

슈퍼클래스(superclass, 또는 부모 클래스)
서브클래스(subclass, 또는 자식 클래스)
메소드 오버라이딩(overriding)- 1:1로 대칭해 덮어씌우기(=재정의 한다)

//open으로 상속 할수있게 열어줌
open class Car{
	var color = ""
    var speed = 0
    
     open fun upSpeed(value: Int){
    	if (speed + value>=200)
        	speed=200
         else
         	speed = speed-value
     }
     
     
     // :Car 로 부모클래스를 상속받음 이때 생성자를 적어주지않으면 오류
     //:Car()= 생성자도 부모클래스에서 상속받아옴
  class Automobile : Car{
  		var seatNum : Int =0
        
      constructor(){
  
 	}
    
    fun countSeatNum() : Int{
    	return seatNum 
      }
      
      //override로 메소드 재정의
      override fun upSpeed(value: Int){
    	if (speed + value>=300)
        	speed=300
         else
         	speed = speed-value
        
  }

추상클래스(추상메소드,일반메소드 함께 가질수 있음),인터페이스(추상메소드만 가짐)

  • 추상메소드 - 가장중요
    abstract 반환형 al();- 내용은 없음
    내용도 없는 추상메소드에서 중요한거
  1. 함수명
  2. 매개변수
  3. 반환형
abstract class Animal{
	var name =""
    abstract fun move()
 }
 
 class Tiger : Animal(){
 	var age : Int=0
    //오버라이딩해서 사용
    override fun move(){
    	println("날개로 날아간다")
      }
   }
  • 인터페이스
abstract class Animal{
	var name =""
    abstract fun move()
 }
 
 interface iAnimal{
 		abstract fun eat()
  }
 
 class Tiger : Animal(),iAnimal{
 	var age : Int=0
    //오버라이딩해서 사용
    override fun move(){
    	println("날개로 날아간다")
      }
    override fun eat(){
    	println("멧되지를 잡아먹는다")
     }
   }

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN