본문 바로가기
대외활동/Naver Boostcourse

[부스트코스] 코틀린 프로그래밍 기본 1/2(함수편) - 변수와 자료형

by 드인 2021. 1. 12.

코틀린 프로그래밍 기본 1/2 (함수편)


0. 오리엔테이션

1. 코틀린의 기본의 기본을 읽혀요!

- 코틀린이란 무엇일까?

 - 변수와 자료형, 연산자

2. 함수형 프로그래밍 이란?

 - 마법의 요술상자, 함수의 기본

 - 요술상자, 함수 가지고 놀기

3. 프로그램 흐름의 제어

 - 프로그램의 흐름을 제어해보자!

4. 코틀린의 표준함수 활용하기

 - 코틀린과 표준함수

5. 강좌 마무리 프로젝트

깃허브 코드 : github.com/0525hhgus/Kotlin-study

 

0525hhgus/Kotlin-study

Kotlin-study. Contribute to 0525hhgus/Kotlin-study development by creating an account on GitHub.

github.com


[ 변수와 자료형, 연산자 ]


1. 기본 자료형과 변수 선언방법 - 불변형, 기본형

1) 자료형과 변수의 선언

▶ 자료형

(1) Int : 정수 (1, 2, 3 ...)

(2) String : 문자열 ("Kotlin", "Hello123" ...)

(3) Float : 실수 (1.2, 3.4 ...)

 

▶ 변수

(1) val (value) : 불변형

(2) var (variable) : 가변형

 

▶ 변수의 선언

val username: String = "Kotlin"

선언 키워드 변수 이름 자료형

 

▶ 변수의 선언

- 컴파일러가 알 수 있는 타입은 타입명 제거 가능 데이터형 추론 기능

 

▶ 코드 예시

fun main(){
    var userName = "Kotlin" // 자료형을 추론
    val count = 5
    userName = "Dwin"

    println("username: $userName, count: $count")
}

실행 결과

2) 변수명의 예

 val username = "Kotlin"  자료형을 추론하여 String으로 결정

 var username  → 자료형을 지정하지 않으면 사용 불가

 val init: Int  → 사용전 or 생성자 시점에서 init 변수를 초기화

val number = 10  → number 변수는 in형으로 추론

 

▶ 변수 이름 작성시 고려사항

- 숫자로 시작 X

- 코틀린에서 사용되는 키워드 사용 X

- 의미 있는 단어를 사용 O

바람직한 코드 작성의 중요성

 (지난 CS50 강의 때 추천받았던 사이트지만 함께 보면 좋을 것 같아 첨부했습니다.) 

developer.gnome.org/programming-guidelines/stable/writing-good-code.html.ko

 

바람직한 코드 작성의 중요성

그놈은 매우 야심적인 자유 소프트웨어 프로젝트이며, 상호간 더 혹은 덜 독립적인 수많은 소프트웨어 패키지로 이루어져있습니다. 그놈에서 작업하는 수많은 결과물은 자발적인 봉사자가 만

developer.gnome.org

- 여러 단어 사용시 카멜 표기법 사용

 

3) 카멜 표기법

▶ 일반 변수, 함수명 등

- camelCase

- numberOfBooks

- myFirstNumber

 

▶ 클래스, 인터페이스 등

- AnimalCategory

- CarEngine

 

4) 기본형과 참조형

▶ 기본형 (코틀린에서 사용 X But 자바에서는 사용 O / 참조형보다 성능이 좋음)

- 가공되지 ㅣ않은 순수한 자료형으로 프로그래밍 언어에 내장

- int, lomg, float, double 등

 

▶ 참조형 (기본형보다 덜 복잡함)

- 동적 공간에 데이터를 둔 다음, 이것을 참조하는 자료형

- Int, Long, Float, Double 등

 

5) 기본형과 참조형의 원리

▶ 자바의 기본형과 참조형의 원리

int a = 77; // 기본형
Person person = new Person(); // 객체 참조형으로 person 객체를 위해 참조 주소(A12)를 가진다.

강사님께서 잘 설명해주셔서 쉽게 이해할 수 있었지만, 참조에 대해 잘 정리된 사이트가 있어서 덧붙입니다.

opentutorials.org/course/2517/14152

 

참조(reference) - 프로그래밍 입문

복제 전자화된 시스템의 가장 중요한 특징은 복제다. 현실의 사물과 다르게 전자화된 시스템 위의 데이터를 복제 하는데는 비용이 거의 들지 않는다. 바로 이러한 특징이 소프트웨어를 기존의

opentutorials.org

 

2. 기본 자료형과 변수 선언방법 - 정수형, 실수형

1) 정수형

▶ 음수가 사용되는 부호 있는 자료형

부호 없는 정수형 (1.3버전 실험적)

- 최적화된 자료형을 사용

 

2) 자료형 사용의 예

▶ 자료형 생략

var num01 = 127 // Int형으로 추론
var num02 = -326127 // Int형으로 추론
var num03 = 127435252 // Int형으로 추론
var num04 = 9999999999342999 // Long형으로 추론

▶ 접미사 접두사 사용

var exp01 = 127 // Int형으로 추론
var exp02 = 123L // 접두사 L을 사용해 Long형으로 추론
var exp03 = 0x0F // 접두사 0x을 사용해 16진 표기가 사용된 Int형으로 추론
var exp04 = 0b00001011 // 접두사 0b를 사용해 2진 표기가 사용된 Int형으로 추론

▶ 작은 값의 사용

var exp05: Byte = 127 // 명시적으로 자료형을 지정(Byte)
var exp06 = 32767 // 명시적으로 자료형을 지정하지 않으면 Short형 범위의 값도 Int형으로 추론
var exp07: Short = 32767 // 명시적으로 자료형을 지정(Short)

 

3) 부호없는 자료형

▶ 부호 없는 정수 자료형

var uint: UInt = 153u
var ushort: UShort = 65535u
var ulong: ULong = 4665535uL
var ubyte: UByte = 255u

부호 없는 정수 자료형은 각각 선언 자료형의 접두사로 u를, 변수 값의 접미사로 u를 붙입니다. 

 

▶ 큰 수를 읽기 쉽게 하는 방법

- 읽기 쉽게 하기 위해 언더스코어(_)를 포함해 표현

var number = 1_000_000
var cardNum = 1234_1234_1234_1234L
var hexVal = 0xAB_CD_EF_12
var bytes = 0b1101_0010

실제 값에는 영향 X

 

4) 실수 자료형

Double : 8바이트(64비트)

Float : 4바이트(32비트) 

var exp01 = 3.14 // Double형으로 추론(기본)
var exp02 = 3.14F // 식별자 F에 의해 Float형으로 추론

출처 : 부스트코스 코틀린 강의

 

5) 부동 소숫점의 표현

▶ 32비트와 64비트의 부동 소수점 표현

 

▶ -12.375(10진수)의 표현

(1) 음수 : -

 - 127(bias) 기준으로 구분

(2) 절댓값 : 12.375

 = 1100.011(2진수)

 = 1.1000111 x 2^3

 = 1생략

 = 100011을 가수부에 표현

 = 2^3 173+3 = 130(10진수) = 10000010(2진수)

 

6) 공간제약에 따른 부동 소숫점 표현의 제한

package chap02.section2

fun main() {
	var num: Double = 0.1
    
    // num에 0.1를 1000번 더함
    for(x in 0..999) {
    	num += 0.1
    }
   	println(num) // 100.0999999999859
}

 부동 소숫점 오차에 대해 잘 정리되어 있어서 참고하면 좋을 것 같습니다.

ssoco.tistory.com/25

 

[Trouble Shooting] 부동소수점 오차 / float, double (실수 자료형) 정확도, BigDecimal

최근 소수점을 중요하게 다뤄야하는 작업을 하고 있던 중 실수 계산 값이 미묘하게 다른 것을 알았고 오류를 찾기 위해 소스 코드를 다시 보았습니다. 디버깅을 하던 중, 언젠가 실수 계산의 정

ssoco.tistory.com

 

7) 부동 소숫점 제한의 예

package chap02.section2

fun main() {
	var num: Double = 0.1
    
    // num에 0.1를 1000번 더함
    for(x in 0..999) { // 시작점..끝점 (0..999)
    	num += 0.1
    }
   	println(num) // 100.0999999999859
}

실행 결과

 

3. 기본 자료형과 변수 선언방법 - 크기 범위와 기타 자료형

1) 각 자료형 최대 최솟값 알아보기 예제

package chap02.section2

fun main() {
    println("Byte: ${Byte.MIN_VALUE}~${Byte.MAX_VALUE}")
    println("Int: ${Int.MIN_VALUE}~${Int.MAX_VALUE}")
    println("Short: ${Short.MIN_VALUE}~${Short.MAX_VALUE}")
    println("Long: ${Long.MIN_VALUE}~${Long.MAX_VALUE}")
    println("Float: ${Float.MIN_VALUE}~${Float.MAX_VALUE}")
    println("Double: ${Double.MIN_VALUE}~${Double.MAX_VALUE}")
}

실행결과

2) 2의 보수

▶ 자료형의 최소 최대

(1) 음수는 2의 보수 표현을 사용해 연산됨

 - 절댓값의 이진수에 값을 뒤집고 1을 더함

(2) 예) -6(10진수)

     = 6의 2진값 : 0000 0110(2진수)

     = 값 뒤집기 : 1111 1001(2진수)

     = 1을 더하기 : 1111 1010(2진수) 

(3) 2의 보수를 연산에 사용하는 이유

- 제한된 자료형을 음수/양수로 나누어 최대한 사용하며 2의 보수는 가산 회로만으로 뺄셈을 표현할 수 있기 때문

 

3) 그 밖의 자료형(논리자료형, 문자자료형)

▶ 논리 자료형

- Boolean(1비트): true, false

val isOpen = true // isOpen은 Boolean으로 추론
val isUploaded: Boolean // 선언만 한 경우 자료형(Boolean) 반드시 명시

 

▶ 문자 자료형

- Char(2바이트(16비트)) : 0~2^15-1(\u0000 - \uffff)

val ch = 'k' // ch는 Char으로 추론
val ch2: Char // 선언만 한 경우 자료형(Char) 반드시 명시

 

4) 문자열 자료형

▶ 문자열

- String으로 선언되며 String Pool이라는 공간에 구성 (동적 공간)

package chap02.section2

fun main() {
    var str1: String = "Hello"
    var str2 = "Kotlin"
    var str3 = "Hello"
    
    println("str1 === str2: ${str1 === str2}")
    println("str1 === str3: ${str1 === str3}")
}

- var로 선언된 str1의 참조 주소는 가변형으로 바뀔 수 있음 (새로운 공간이 만들어짐)

- 그러나 생성된 메모리 공간의 "Hello"는 변경되지 X

- == : 값만 비교 (자바는 ==로 참조까지 비교)

- === : 참조까지 비교

 

5) 문자열 자료형 비교 검사하기 예제

package chap02.section2

fun main() {
    var str1: String = "Hello"
    var str2 = "Kotlin"
    var str3 = "Hello"
    
    println("str1 === str2: ${str1 === str2}")
    println("str1 === str3: ${str1 === str3}")
}

실행 결과

 

6) 표현식과 문자열

▶ 표현식과 $ 기호 사용하여 문자열 출력하기

var a = 1
val s1 = "a is $a" // String 자료형의 s1을 선언하고 초기화. 변수 a가 사용됨

 

▶ 코딩해 보세요! StringExpression.kt

package chap02.section2

fun main() {
    var a = 1
    val str1 = "a = $a"
    val str2 = "a = ${a + 1}" // 문자열에 표현식 사용
    
    println("str1: \"$str1\", \"$str2\"") // "(큰 따옴표) 사용하려면 \"로 사용
}

실행 결과

 


서포터즈 네임택


감사합니다!