1.  코틀린의 특징

👩🏻‍🚀  안드로이드의 개발 환경은 Java 언어를 중심으로 확장되어 있는데, 새로운 개발 언어를 도입함

👩🏻‍🚀  Kotlin 코틀린은 2017년 안드로이드 공식 개발 언어로 지정
      ▶️ 구글이 코틀린을 안드로이드 공식 언어로 지정한 이유는 코틀린이 현대적인 언어로서 갖는 장점들 때문

👩🏻‍🚀  코틀린은 유명 IDE 제작사인 JetBrain이 만든 언어로, 같은 회사에서 만든 Intellij와 Android Studio IDE에서

       매우 잘 지원되는 언어


1) 코틀린의 장점


코틀린은 자바와 100% 상호 호환되면서도 더 현대적이고 간결 

      ▶️  자바와 코틀린 코드를 하나의 프로젝트에서 섞어서 사용할 수 있음
-  Null Pointer Exception이 발생할 수 있는 코드를 금지하고 Null에 대해 안전한 코드를 간결하게 표현 할 수 있도록 지원
'타입 추론'을 지원

      ▶️  정적 타입 지정 언어가 가진 정확성과 성능을 보장하면서도 동적 타입 언어와 같은 간결함을 유지할 수 있음
'람다 표현식'을 지원  ▶️  코틀린의 람다 표현식은 자바8부터 지원되는 람다 표현식보다 더 간결
'객체 지향' 프로그래밍과 '함수형' 프로그래밍 스타일을 모두 지원
-  코틀린의 '확장 함수'는 기존 클래스의 변경없이 클래스의 기능을 추가하는 것이 가능
-  코틀린은 이미 널리 쓰이는 '코드 패턴을 간결화할 수 있도록 설계'
      ▶️ 예를 들면 'getter', 'setter'를 묵시적으로 제공하고 자주 쓰이는 'Singleton 패턴'은 'object'로서 지원
-  코틀린의 함수는 '일급 객체'로서 다른 함수의 파라미터로 전달 가능하고 함수의 반환값을 함수 형태로 반환할 수 있어

    '높은 추상화'가 가능
-  코틀린은 '불변성을 보장하는 변수'와 '변경이 가능한 변수'를 언어 차원에서 분리
       ▶️  불변값을 갖는 변수의 사용은 '다중 쓰레드 애플리케이션 개발'에 보다 유용

 


2.  변수

👩🏻‍🚀  코틀린은 변수명을 먼저 쓰고, 콜론 : 을 쓴 후 자료형을 명시

👩🏻‍🚀  문맥상 추론이 가능하다면 자료명을 생략할 수 있음 ▶️ 코틀린의 형추론이라고 함

👩🏻‍🚀  변수명만 쓸 때는 자료형을 적어줘야 함

💡  val 변수명: 자료형 = 값
fun main() {

    val pi: Double = 3.14

    val name = "tom" // String 으로 형 추론.

    // val은 값을 변경할 수 없는 변수이므로 값을 재할당 하면 다음과 같이 컴파일 오류가 남
    // pi = 3.141593 // 오류 Val cannot be reassigned

    // 값을 변경하고 싶을 때는 var을 사용해야 됨. var로 정의된 변수는 값을 바꿀 수 있음
    var age = 21 // 형추론 Int
    println(age)  // 21
    age = 25 // 재할당
    println(age) // 25
}

 

1)  변수와 자료형


  👾  변수는 val, var 이라는 키워드를 이용하여 선언
        ⚡️  val로 변수를 선언하면 최초로 지정한 변수의 값으로 초기화하고 더 이상 바꿀 수 없는 '읽기 전용 변수'가 됨
        ⚡️  var로 변수를 선언하면 최초로 지정한 변수의 초깃값이 있더라도 '값을 바꿀 수 있음'

💡  변수를 선언한 예 :
       val username: String = "kildong"
       ➡️  변경되지 않는 변수 username이 String 자료형으로 선언되었고 "kildong"이 값으로 할당

 

  👾  코틀린은 자료형을 지정하지 않고 변수를 선언하면 변수에 할당된 값("kildong")을 보고 알아서 자료형을 지정할 수 있음

         ▶️  이것을 '자료형 추론'이라고 함
         ▶️  즉 username 변수에 "kildong"이라는 값만 할당해도 코틀린이 알아서 이 변수의 자료형을 String으로 지정
  👾  단 자료형을 지정하지 않은 변수는 반드시 자료형을 추론할 값을 지정해야 함
  👾  선언만 하고 초기화를 하지 않을 때는 반드시 자료형을 적어줘야 함

fun main() {
    val number = 10 // number 변수는 Int 형으로 추론
    var language = "Korean" // language 변수는 String으롤 추론.
    language = "English" // var 키워드로 선언한 변수는 값을 다시 할당할 수 있음
    // language = 10 // 파이썬처럼 다른 데이터 타입의 데이터는 저장할 수 없음.
    val secondNumber: Int = 20 // secondNumber 변수는 자료형을 Int로 명시적으로 지정.
    // secondNumber = 30 // val로 선언한 변수를 값을 다시 할당할 수 없음.

    println("number: $number") // 10
    println("language: $language") // English
    println("secondNumber: $secondNumber") // 20
}

 


3.  기본 자료형

👩🏻‍🚀  자료형은 크게 기본 자료형 primitive data type참조 자료형 reference data type으로 나누어 진다.
      ⚡️ 기본형은 순수하게 값을 저장하는 자료형이고 자바에서는 int, byte, boolean 등이 해당
      ⚡️ 참조형은 객체를 만들고 변수에는 객체의 참조값을 저장하고 자바에서는 String, Array 등이 해당

👩🏻‍🚀  코틀린의 자료형은 모두 참조형. 즉 모든 자료형이 객체 형태



(1) 정수 자료형  -  Byte, Short, Int, Long


   👾
  코틀린은 정수의 경우에는 숫자가 작아도 Int 형으로 추론 (기본값)

          ➡️  Byte나 Short 같은 작은 범위를 사용할 때는 자료형을 지정해야 함
 
   1)  Int : 정수


      📍  소수점이 없는 정수값을 지정할 때 사용
      📍  가독성을 높이기 위해 언더바(_)로 자릿수를 구분할 수 있음
      📍  다만, 언더바는 개발자가 읽기 쉽게 하기 위한 것으로 컴퓨터는 동일하게 인식

fun main() {    
    var intValue: Int
    intValue = 3
    intValue = 2_147_483_435
}

 


  2) Long : 정수


     📍  Int 보다 큰 범위의 정수를 저장할 수 있음
     📍  Double과 Float의 관계처럼 Int와 구분하기 위해서 숫자의 끝에 L을 붙여줌
     📍  Long 타입의 경우에는 설정한 글꼴에 따라 숫자가 1과 구분이 어려울 수 있기 때문에 대문자를 사용

fun main() {
    var longValue = 3_141592L
}

 


  3) Short와 Byte : 정수


    📍 정숫값을 저장할 때 사용하는데 입력할 수 있는 값의 크기가 Int보다 작음

fun main() {
    var shortValue: Short = 32_767
    var byteValue: Byte = 127
}

 


(2)  실수 자료형 - Double, Float


  👾  실수의 경우 자료형을 명시하지 않으면 Double 형이 됨 (기본값)

  👾  Float 형으로 지정하고 싶다면 값뒤에 F를 추가로 붙여줌

fun main() {
    val numFloat: Float = 100.0F // 자료형 생략 가능
    val numDouble: Double = 100.0 // 자료형 생략 가능
}


  1) Double : 실수 - 소수점이 있는 값을 저장할 때 사용

fun main() {
    var doubleValue: Double
    doubleValue = 3.141592
}


  2) Float : 실수


    📍 Double과 동일한 용도이지만 더 작은 범위의 숫자를 저장할 때 사용
    📍 Double과 구분하기 위해 Float의 경우 숫자 끝에 'F'를 붙여줌

fun main() {   
    var floatValue: Float
    floatValue = 3.141592F
}

 


(3) 문자 자료형


    👾  문자 자료형은 문자 하나를 표현하는 Char형과 문자열을 표현하는 String형으로 분류
    👾  Char 형은 문자를 작은 따옴표로 감싸고, String형은 문자열을 큰 따옴표로 감쌈

fun main() {
    val char: Char = 'a' // 자료형 생략 가능
    val string: String = "abc" // 자료형 생략 가능
}

(4) 논리 자료형


   👾  참, 거짓을 표현하는 true, false 를 사용하고 주로 조건 검사에 사용

fun main() {
    val isTrue: Boolean = true // 자료형 생략 가능
}

 


4.  상수  const

👩🏻‍🚀  상수는 주로 기준이 되는 변하지 않는 값을 입력해 둘 때 사용

👩🏻‍🚀  읽기 전용 변수인 val 앞에 const 키워드를 붙여서 만듦. 전역으로만 사용가능

💡  val과 같이 읽기 전용인 것은 동일하지만, 컴파일 시에 값이 결정되기 때문에 Int, Long과 같은 기본형과 문자열인 String만 입력할 수 있음
const val PI = 3.141592653589793

 

 

 

 

 

[ 내용 참고 : IT 학원 강의 ]

 


 

1.  자료형과 기본 자료형

 

1) 자료형 data type ; 자료의 형식

 

  👩🏻‍💻  type() 함수로 자료의 형식을 확인

print(type('안녕하세요') # 결과 : <class 'str'>
print(type(100))  # 결과 : <class 'int'>
print(type(3.14)) # 결과 : <class 'float'>
print(type(True)) # 결과 : <class 'bool'>

 

  📌  파이썬의 기본 데이터 타입 4가지 :  정수, 실수, 불, 문자열
  📌  파이썬의 컬렉션 데이터 타입 4가지 :  list, tuple, set, dict

 


 

2) 문자열  String

 

  👩🏻‍💻  글자들이 나열된 것을 '문자열 (String)' 이라고 함

  👩🏻‍💻  문자열 만들 때 큰 따옴표("") 나 작은 따옴표('') 사용

 

     💡  문자열 내부에 따옴표 넣기

print(""안녕하세요"라고 말했다.")

# 결과) SyntaxError: invalid syntax

 

    ⚡️  파이썬 프로그래밍 언어는 자료(문자열)와 자료(문자열)를 단순하게 나열할 수 x

    ⚡️  위의 구문에서 문자열로 인식하는 부분은  [ ""        "라고 말했다." ]

    ⚡️  큰 따옴표를 내부에 넣고 싶으면 작은 따옴표로 문자열을 만들면 됨

           ▶️ 반대로 작은 따옴표를 문자열 내부에 넣고 싶으면 큰 따옴표로 문자열을 만들면 됨

print('"안녕하세요"라고 말했다.')
# 결과 : "안녕하세요"라고 말했다.

 

   


 

① 이스케이프 문자 escape character

 

  -  역슬래시( \ ) 기호와 함께 조합해서 사용하는 특수한 문자를 의미

  · \"   :  큰 따옴표
  · \'    :  작은 따옴표
  · \n   :  줄바꿈
  · \t    :  탭 (띄어쓰기)
  · \\    :  역슬래시(\)를 의미

 

print('Hello \'World\'')
print('*\n**\n***') 
print('이름\t연락처')

''' 
실행결과
Hello 'World'
*
**
***
이름	연락처
'''

 


 

②  여러 줄 문자열

 

  -  삼중 큰 따옴표(""") 및 작은 따옴표(''')사용하면 여러 줄 문자열 기능 지원

      ▶️  주석도 가능

address = '''우편번호 12345
서울시 영등포구 여의도동
서울빌딩 501호'''

print(address)
# 결과
# (공백)
# 우편번호 12345
# 서울시 영등포구 여의도동
# 서울빌딩 501호
# (공백)

 


 

③  줄바꿈 없이 문자열 만들기

 

  - 역슬래시 ( \ ) 사용하면 의도하지 않은 줄바꿈이 들어가지 않게끔 한다.

address = '''\
우편번호 12345
서울시 영등포구 여의도동
서울빌딩 501호\
''' 
print(address)
# 결과
# 우편번호 12345
# 서울시 영등포구 여의도동
# 서울빌딩 501호
# -> 위 아래로 공백 구간이 생기지 않음

 

 


3) 문자열 연산자

 

# 시퀀스 연산자 : 순서가 있는 시퀀스(리스트, 튜플, range, 문자열 등)에서 사용할 수 있는 연산자
# + : 연결하기
# * : 반복하기

tree = '#'
space = ' '
print(space * 4 + tree * 1) #    #
print(space * 3 + tree * 3) #   ###
print(space * 2 + tree * 5) #  #####
print(space * 1 + tree * 7) # #######
print(space * 0 + tree * 9) ##########
print('-' * 20) # --------------------

 

 

💡 문자열 연결 연산자 : +


 "문자열" + "문자열"

   -  두 문자열을 연결해서 새로운 문자열을 만들어 냄

print('안녕' + '하세요')
# 결과 ) 안녕하세요

 

   📌  문자열은 무조건 문자열끼리 + 연산자를 사용해서 연결해야함

   📌  숫자를 연결하고 싶다면 큰따옴표나 작은따옴표를 붙여 문자열로 인식시켜야 함

print('안녕하세요' + '1')
# 결과: 안녕하세요1

 

 


 

💡  문자열 반복 연산자: *

 

    - 문자열을 숫자와 * 연산자로 연결하면 숫자만큼 문자열을 반복할 수 있다.

print('반가워요' * 3)
print(3 * '반가워요')
# 결과 : 반가워요반가워요반가워요

 


 

💡 문자 선택 연산자(인덱싱): []

 

    - 문자열 내부의 문자 하나를 선택하는 연산자

    - 대괄호 [] 안에 선택할 문자의 위치를 지정하며, 이 숫자를 인덱스 index라고 부른다.

    - 파이썬은 제로 인덱스 유형을 사용  ▶️ 숫자를 0부터 세는 인덱스 

 

h e l l o
[0] [1] [2] [3] [4]
[-5] [-4] [-3] [-2] [-1]

 

s = 'hello'
print(s[1]) # e
# 마이너스(-) 인덱스는 문자열 뒤에서 부터 부여, 마지막 인덱스는 -1이 됨
print(s[1] == s[-4]) # True

 


 

💡  문자열 범위 선택 연산자(슬라이싱): [ : ]

 

    -  문자열의 특정 범위를 선택할 때 사용

        ex.  문자열에서 첫 번째 문자부터 세 번째 문자까지 선택 (범위 지정)

    -  범위는 대괄호 안에 위치를 콜론(:)으로 구분해서 지정

    - 파이썬은 범위 지정시 마지막 숫자를 포함하지 않는다.

# s[start:stop:step]
# start : 시작 인덱스를 지정. 생락하면 처음부터 추출
# stop :  종료 인덱스를 지정. 생략하면 끝까지 추출
# step : 인덱스의 증감값, 생략하면 1씩 변화
print()
s = 'banana'
print(s[0:3])  # ban / 종료 인덱스는 포함하지 않음
print(s[0:6:2])  # bnn
print(s[:6:2])  # bnn
print(s[::])  # banana
print(s[2::2])  # nn

 

 


 

💡  IndexError(index out of range) 예외

 

    - 발생 이유 : 리스트/문자열의 수를 넘는 요소/글자를 선택할 때 발생

        ex. '안녕하세요'[10]  ▶️  다섯 글자인데 10번째 문자에 접근  ▶️  IndexError

 


 

4) 문자열 길이 구하기

 

👩🏻‍💻 len() 함수를 사용하여 문자열의 길이를 구함

 

print(len('안녕하세요'))
# 결과: 5

 

 

 

 

 

[ 내용 참고 : IT학원 강의 및 책 '혼자 공부하는 파이썬' ]

+ Recent posts