코틀린 17

17. Null

Null이란?데이터의 값이 없거나 알 수 없는 상태를 의미한다. 0이나 빈칸이 아니다.Null Pointer Exception이란 Null로 인해 발생한 에러다. 코틀린에서는 이 에러를 방지하기 위해 기본적으로 Null을 허용하지 않는다. var name1var name2 : String?코틀린에서 name1로 작성만 하면 완전 에러가 발생하여 코드를 구동하지 못한다.자바에서 int a로 코드를 마무리하고자 하면 name2처럼 작성해야 한다. 그럼에도 출력을 시도하면 초기화를 하지 않았다고 콘솔창에서 에러를 보여준다. Kotlin: Variable 'name2' must be initialized. 이때 코드를 아래와 같이 작성하면 null로 선언이 가능하다.var name3 : String? = nul..

코틀린 2025.02.08

16. 인터페이스

인터페이스란?서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면이다. 사용자가 기기를 쉽게 동작시키는데 도움을 주는 시스템을 의미한다. 공통부분을 여러 클래스에서 동시에 사용할 수 있도로 강제한다. 추상화 클래스처럼 단독으로 사용할 수 없으며 반드시 상속을 받아 사용한다. 왜 사용할까?예를 들어 신라면, 짜파게티라는 클래스가 있다고 하자. 둘 다 면, 스프라는 속성을 공유한다. 만약 안성탕면, 너구리, 육개장 클래스가 추가된다고 할 때 그때마다 면, 스프라는 속성을 선언해야 할 때 만약 스프라는 속성을 생략한다면 우리는 그것을 라면이라 부르지 않을 것이다. 이처럼 인터페이스는 필요한 속성을 사용해야 한다고 강제하는 역할을 한다. 인터페이스는 아래의 예시코드처럼 선언한..

코틀린 2025.02.06

15. 클래스 - Object

싱글톤 패턴생성자가 여러 차례 호출이 되더라도 실제로 생성되는 객체는 하나를 리턴하는 디자인 패턴이다. 디자인 패턴에 대해 궁금하다면 아래의 페이지를 확인하길 바란다. 디자인 패턴객체 지향 프로그래밍 설계를 할 때 자주 발생하는 문제들을 피하기 위해 사용되는 패턴. 여러 사람이 협업해서 개발namu.wiki 코틀린에서는 이 싱글톤 패턴을 처리하기 위한 고유의 문법 object라는 개념을 가지고 있다. 오브젝트아래의 코드를 바탕으로 오브젝트를 설명하겠다.object Sole{ val number = 1 fun sayHello() : String{ return "Hello Object" }} 오브젝트를 사용하면 클래스와 달리 따로 선언할 필요가 사라진다. 메인 함수를 보자.// ..

코틀린 2025.02.06

14. 추상 클래스, 데이터 클래스

추상 클래스상대방이 말을 애매하게 할 때 우리는 "너의 말은 추상스러워." 혹은 "왜 추상스럽게 말해?"라고 할 때가 있다. 객체 지향 프로그래밍에서 코드를 작성할 때 클래스나 함수를 명확하게 작성하기 어려울 때가 있다.이때 추상 클래스 또는 추상 메서드를 사용할 수 있다. abstract class Game{ abstract fun gameStart(title: String) abstract val name : String}추상 클래스를 선언할 때 일반 클래스와 달리 앞에 abstract를 반드시 작성해야 한다. 추상 클래스를 자세히 보면 메서드 앞에서도 abstract라고 적은 것을 볼 수 있는데 이를 추상 메서드, 추상 함수라고 부른다.일반 클래스에서는 선언할 수 없으나 매개 변수를 받을..

코틀린 2025.02.05

13. 클래스 - 상속

객체 지향 프로그래밍에서 설명하였듯이 부모 클래스의 변수와 함수를 자녀 클래스에서 재사용하는 것을 뜻한다. 상속을 하는 이유는?만약 동일한 코드를 100개의 클래스에서 사용한다고 가정하자. 그렇다면 수정할 때 어떻게 될까?수많은 시간과 노력이 필요할 것이며 분명 오타로 인한 프로그램 에러 상황이 발생할 것이다.이를 방지하기 위해 공통으로 사용하는 코드는 부모 클래스에서 변수나 함수로 선언해 자식 클래스에서 상속받아 사용한다. open부모 클래스에서 자녀 클래스에 코드를 물려주기(?) 위해서는 open을 선언해야 한다. open은 클래스나 함수 맨 앞에 작성한다.open class Device(val model : String, val company : String, val price : Int){// 부..

코틀린 2025.01.29

12. 클래스 - 기본

코틀린에서 클래스를 선언하는 방법은 아래와 같다.class Car(name: String, color: String, age: Int){ // 매개 변수를 바로 받을 수 있다.} 생성자객체 지향 프로그래밍에서 객체가 생성될 때 초기화 시켜주는 함수이다.Java에서는 클래스와 이름이 동일해야 하나 코틀린에서는 init으로 시작한다.init { // 주 생성자 println("Name : $name , Color : $color , Age : $age")}  클래스에서 위의 코드처럼 작성하면 메인 함수에서는 다음과 같이 작성하면 클래스를 선언할 수 있다.fun main() { val c1 = Car("Toyota", "Red", 10) // Name : Toyota , Color : Red , A..

코틀린 2025.01.29

11. 객체 지향 프로그래밍

클래스를 본격적으로 시작하기 전에 객체 지향 프로그래밍을 간략하게 정리해 보았다. 정의OOP(Object-Oriented Programming)는 프로그램 설계 방법론의 일종이다. 프로그램을 단순히 데이터와 차리 방법으로 나눈 것이 아닌, 프로그램을 수많은 객체(Object)라는 기본 단위로 나누고 이들의 상호 작용으로 서술하는 방식이다. 탄생초기 프로그래밍 방식은 절차적 프로그래밍 방식이었다. 입력을 받아 명시된 순서대로 처리한 다음 그 결과를 내는 것을 중점으로 두었다. 그러나 알고리즘이 조금만 복잡해지면 스파게티 코드를 만들어 코드 가독성과 유지보수를 크게 어렵게 하였다. 이를 해결하기 위해 1968년 에츠허르 다익스트라가 제시한 문의 해로움>이라는 논문을 통해 구조적 프로그래밍 방식을 제안하면서 ..

코틀린 2025.01.29

10. 자료 구조

자료 구조란?컴퓨터 과학에서 효율적인 접근 및 수정을 가능케 하는 자료의 조직, 관리, 저장을 의미한다.종류는 List, Set, Map, Stack, Queue 등이 있으며 그중 List, Set, Map 읽기 전용인 immutable과 수정이 가능한 mutable로도 구별된다. List순서를 가지고 일렬로 나열한 원소들의 모임을 정의한다. 중복을 허용한다.val list1 = listOf("Kotlin", "Java", "Kotlin")// 람다식으로 결과를 출력하였다. 람다식은 나중에 다룰 예정이다.list1.forEach{ i -> println("$i")}List, Set, Map은 mutable로 시작하면 수정이 가능하다.val list2 = mutableListOf("Honshu", "..

코틀린 2025.01.29

09. 함수

이 장에서는 이전에 잠깐 언급하였던 함수에 대해 소개하겠다. 함수란프로그램 소스 코드에서 일정한 동작을 수행하는 코드의 집합을 뜻한다. 함수를 사용하는 이유는?동일한 코드를 여러 번 사용할 때 함수를 통해 하나의 논리적 단위로 사용하면 코드 재사용성 증가, 가독성 향상, 유지보수에 큰 도움이 된다. 종류매개 변수를 받느냐, 반환할 값이 있느냐에 따라 네 가지로 나누어진다.* 매개 변수: 함수가 외부에서 데이터를 받아오는 변수이다.* 반환 값: 함수가 외부로 선언해야 할 값이다. 반환할 값이 있는 함수반환할 자료형과 함수 내부에서 반환할 값을 return 처리한다.fun 함수 이름(변수명: 자료형): 반환할 자료형{ // 매개 변수는 생략이 가능하다. return 값} 매개 변수가 있는 함수fun fun..

코틀린 2025.01.29

08. String Template

코틀린에서는 문자열에 데이터를 입력할 때 다음 두 가지 방법을 사용할 수 있다.var name = "Kate"println("My name is "+name) // 큰 따옴표 밖에 +를 통해 연결하는 방법println("My name is $name") // 문자열 안에 $변수명을 사용하는 방법첫 번째 방법은 기존에 Java에서 자주 사용한 방법이다. 단점은 밑줄이 심하다는 것이다.그에 반에 두 번째 방법은 밑줄이 없어 가독성이 향상된다. 나아가서 $에 {}로 덮어주면 사칙연산도 가능해진다.var num1 = 15var num2 = 2println("Add : "+(num1 + num2)) // 17println("Add : ${num1 + num2}") // 17   GitHub - KrillM/Kot..

코틀린 2025.01.29