Kotlin - 간단한 기본 문법

하이루·2021년 12월 12일
0

Kotlin의 기본 문법

kotlin언어 사이트: https://kotlinlang.org/

기본중의 기본 --> helloworld

1. kotlin은 java와 다르게 문법 마지막에 ";"을 붙이지 않는다.

2. kotlin 또한 java처럼 main함수에서 시작한다.

print()와 println()

println() --> 출력 후 한줄 넘겨줌


함수 선언

         --> 두 식은 동일한 의미를 가진다.

1. 함수 선언은 앞에 fun을 붙여서 한다( function이라는 뜻 )

2. 리턴 타입이 void일 경우 생략 가능 --> ( 위의 main함수의 경우처럼 )

3. kotlin 언어에서는 구문식뿐만아니라 표현식으로도 함수를 작성할 수 있다. ------------------------> (중요 특징)

[구문식 작성]

fun 함수명( 매개변수명 : 매개변수 타입, 매개변수명 : 매개변수 타입, ...... ): 리턴타입 { 함수내용 }

[표현식 작성]

fun 함수명( 매개변수명 : 매개변수 타입, 매개변수명 : 매개변수 타입, ...... ) = 함수리턴내용

표현식 작성의 예시 1)

      --> 이런식으로 다양하게 사용 가능
      

변수, 상수 선언

1. val은 상수에 대한 선언 --> 값을 정하면 변경할 수 없음
2. var은 변수에 대한 선언 --> 값을 정해도 변경할 수 있음

3. a처럼 선언하는 것이 기본 선언

val 변수명: 변수타입 = 값

4. kotlin은 타입추론이 가능하기 때문에 b,c처럼 타입 선언없이 선언할수도 있음

val 변수명 = 값

5. kotlin은 d처럼 선언만 할 수도 있다.

val 변수명: 변수타입

6. kotlin에서는 null_Safe라는 기능이 있기 때문에 d를 선언만하고 초기화하지 않을 경우 경우 오류를 띄운다.

--> null_safe : java의 경우 변수에 타입 선언만 하고 초기화를 안했다면 null을 자동으로 넣어주지만,
kotlin의 null_safe기능은 null에 대해서 안전하게 참조할 수 있도록, null이 들어갈 수 있는 타입을 따로 정해놓고 있다.
--> ( Not-null타입과 Nullable타입 )

따라서 d를 String타입으로 지정한 뒤 초기화시켜주지 않으면 오류메세지를 띄우게 된다.

7. 해당 변수를 Nullable하게 만들어 주려면 e와 같이 선언하면 된다.

val 변수명: String?

       -->  null이 할당될 수 있도록 ( Nullable하도록 ) 선언되었다.
          

변수의 타입 + ( 문자타입의 연산 + boolean타입 )

--> kotlin은 타입추론이라는 기능이 있다.

타입추론

예를 들어)

val a = 20

의 경우 a는 타입 선언을 해주지 않았지만 타입추론기능에 따라 int일 것이라고 추론되어, 이후 a는 int타입으로 인식된다.

--> 만약에 a가 int가 아니라 Long타입으로 추론되기를 원한다면, 위의 그림처럼 값 뒤에 L을 붙여주면 된다. 

val a = 20 --> Int로 추론
val b = 20L --> Long으로 추론
val c = 123.4f --> Float으로 추론
val d = 123.4 --> Double로 추론

문자타입의 연산

--> 위의 그림처럼 문자타입의 더하기 연산은 그냥 물리적으로 문자를 더해주게 된다.

Boolean타입

--> true, false를 나타내며,

Boolean타입 또한 Not-Null타입이다.
따라서 null을 할당할 수 있기 위해선 위의 그림처럼

val 변수명: Boolean?

의 형식으로 변수타입뒤에 ?를 붙여서 Nullable하다는 변수타입선언을 해줘야한다.


반복문

for in 반복문

for ( 변수 in 범위문 step 간격 ){ 반복문내용 }

위의 그림과 같이 다양하게 표현 가능하다.

( 위의 범위문 = range ) --> 그래서 range를 사용하는 반복문이라고 표현함

범위문 부분에는 그림의 마지막처럼 list를 넣어줄수도 있음

While 반복문

--> java에서의 while과 유사
--> do while문도 있음

--> 중간에 continue 키워드를 사용하면 While문의 처음으로 바로 되돌아 갈 수 있음


조건문

--> java에서 썼었던 기존의 if 조건식은 그대로 쓸 수 있음

kotlin에서는 표현식으로 if문 사용가능 (그림의 아래 코드)

  --> 조건에 따라 변수에 다른 값이 할당되게 만듬
  

When 문 --> 기존의 Swich문 대체

--> x의 값에 따라 when문 안의 조건에 해당하는 코드가 실행됨

when ( 조건변수 ) {
조건변수의조건 -> 해당조건을만족했을떄실행되는코드
조건변수의조건 -> 해당조건을만족했을떄실행되는코드
조건변수의조건 -> 해당조건을만족했을떄실행되는코드
......
else -> 위의조건에모두만족하지않을때실행되는코드
}

--> 조건변수의조건의 경우, 위의 그림처럼 다양하게 구성이 가능하다.

x는 int일때,

단일 값
0 -> 실행문

--> x = 0일경우 실행
              

몇몇 값
0,1,2 -> 실행문

--> x = 0 또는 1 또는 2일 경우 실행

범위 값
in 1..10 -> 실행문

--> x = 1~10사이의 정수일 경우 실행

역범위 값
!in 1..10 -> 실행문

--> x = 1~10사이 이외의 정수일 경우 실행    

타입조건
is Int -> 실행문

 --> x가 int타입일 경우 실행
 
 

when문 활용 추가 1

--> 아래와 같이 when문은 매개변수 없이 조건문만 가지고도 활용할 수 있다.

-----------

확장함수 --> 객체의 메소드 사용에 대한 방법

확장함수는 그 이전의 메소드에 대한 반환값에 대해 메소드를 실행시키는 방식이다.

예를들어
a라는 클래스가 있고, 그 클래스가 add(), minus(), DD() 라는 3개의 메소드를 가지고 있고,
각 메소드가 각각의 역할을 한 후 객체 자신 (즉, this)를 리턴한다고 할때

a 객체의 예시

class a{

 a add() {
  
  // add 의 코드
  
 	 return this
  }
 a minus(){
  
  // minus의 코드
  
  	return this
  }
 a DD() {
  
  // DD의 코드
  
  	return this
  }

}

a 클래스를 확장함수로 사용

val abc: a = a()

abc.add().DD().minus()

와 같이 확장 함수로 사용할 수 있다.

--> 위 코드의 의미는
abc 객체의 add()메소드를 실행시킨 뒤,
그 반환값(this이므로 add()가 실행된 a객체가 반환됨)의 DD()메소드를 실행시킨 뒤
그 반환값(this이므로 DD()가 실행된 a객체가 반환됨)의 minus()메소드를 실행시킨 뒤
값을 반환한다.

///////////////////////////////

이것을 조금 응용하면,

예를 들어 이러한 B와 C가 있을 경우

class B{

	val DD = C()

	class C {
    		MethodInC(){
            
           	 // MethodInC의 코드
             
             	}
	}

	C MethodForReturnC(){

		// MethodForReturnC의 코드

		return DD

	}

}

이런 식으로 사용할 수 있다는 뜻이다.

val abc = B()

abc.MethodForReturnC().MethodInC()

즉, abc객체의 메소드인 MethodForReturnC를 실행한 후,
그 메소드의 반환값인 DD( C 클래스의 객체 )에 대해
DD객체의 메소드인 MethodInC()를 실행시키는 형식으로도 사용할 수 있다는 것이다.

 
profile
ㅎㅎ

0개의 댓글