분류 전체보기 1341

타입 스크립트 소개

강의 핸드북 : https://joshua1988.github.io/ts/ 타입스크립트 핸드북 joshua1988.github.io 공식 사이트 : https://www.typescriptlang.org/ JavaScript With Syntax For Types. TypeScript extends JavaScript by adding types to the language. TypeScript speeds up your development experience by catching errors and providing fixes before you even run your code. www.typescriptlang.org 타입 스크립트란? 타입 스크립트는 자바스크립트에 타입을 부여한 언어입니다. 자바..

열거형

enum class PaymentStatus(val label: String) : Payable { //enum 클래스 선언 //enum 클래스도 클래스로 생성자를 만들수 있다 UNPAID("미지급") { override fun isPayable(): Boolean { return true } }, PAID("지급완료") { override fun isPayable(): Boolean = false }, FAILED("지급실패") { override fun isPayable(): Boolean = false }, REFUNDED("환불") { override fun isPayable(): Boolean = false }; //abstract fun isPayable(): Boolean } interfac..

인터페이스

class Product(val name: String, val price: Int) interface Wheel { fun roll() } interface Cart : Wheel { //인터페이스 키워드를 사용해 인터페이스를 정의할 수 있으며, 인터페이스 내부에 구현해야할 함수나, default와 같이 구현이 되어있는 함수 모두 정의할 수 있다. val coin: Int //인터페이스에서 프로퍼티 선언도 할 수 있다. val weight: String get() { //인터페이스는 내부에서 백킹 필드를 사용할 수 없다. return "20kg" } fun add(product: Product) fun rent() { if (coin > 0) { println("카트를 대여합니다.") } } overr..

상속

자바의 상속 객체지향 핵심 원칙 중 하나인 상속은 상속을 통해 기존 코드를 재사용하거나 확장할 수 있다. 자바는 기본적으로 모든 클래스가 상속이 가능하나, 상속에 따른 부작용이 발생할 경우를 대비해 final 키워드로 막을 수 있다. 대표적으로 system 클래스가 있다. System.out.println("Hello World"); public final class System { } 이펙티브 자바의 아이템 중 "상속을 위한 설계와 문서를 작성하고 그렇지 않으면 상속을 금지하라" 라는 주제가 있는데 여기서 상속에 대한 문제점에 대해 나와 있으며, 결과적으로 상속을 목적으로 만든 클래스가 아니면 모두 final로 작성하는 것이 좋다 코틀린의 상속 //코틀린 모든 클래스의 조상은 Any이다(equals, ..

클래스와 프로퍼티

/* class Coffee constructor(val name: String) { //constructor 키워드를 생략할 수 있다. } */ class Coffee( var name: String = "", var price: Int = 0, //후행 쉼표가 가능하다, price를 수정하지 않고 새로운 필드를 추가할 수 있다. //코드 리뷰 시 변경사항이 한부분만 변경된 것을 명시적으로 알 수 있다 //val brand: String, var iced:Boolean = false, ){ val brand: String //get() = "스타벅스" //커스텀 getter get() { return "스타벅스" } var quantity: Int = 0 set(value) { //커스텀 setter ..

예외 처리

Error : 시스템에 비정상적인 상황이 발생한 경우. 예측이 어렵고 기본적으로 복구가 불가능하다. ex) OutOfMemoryError, StackOverFlowError Exception : 시스템에서 포착 가능하여(try-catch) 복구 가능한 에러. 예외 처리 강제 ex) IOException, FileNotFoundException @Transcactional에서 해당 예외가 발생한다면 기본적으로 롤백이 동작하지 않는다(rollbackFor를 사용해야 한다) RuntimeException : 런타임 시 발생하는 예외, 예외 처리를 강제하지 않는다. ex) NullPointerException, ArrayIndexOutOfBoundsException 코틀린에서는 자바의 Exception 계층을 ..

널 안정성

널 참조의 위험성 자바를 포함한 많은 프로그래밍 언어에서 가장 많이 발생하는 예외 유형이 NullPointerException이다. 줄여서 NPE라고도 부른다 null을 발명한 토니호어는 1965년 null을 발명한 후 수십 년간 수십억 달러의 시스템 오류와 피해가 발생했기 때문에 1조 원짜리 실수였다고 고백한다. 자바에선 NPE를 줄이기 위해 JDK8에서 Optional을 지원하기 시작했다. 자바에서 Optional은 값을 래핑 하기 때문에 객체 생성에 따른 오버헤드가 발생하고, 컴파일 단계에서 Null 가능성을 검사하지 않는다. 코틀린을 비록 한 최신 언어에선 널 가능성을 컴파일러가 미리 감지해서 NPE 가능성을 줄일 수 있다. fun getNullStr(): String? = null fun get..

흐름제어

If-else fun main(){ //if..else 사용 val job = "Software Developer" if(job == "Software Developer"){ println("개발자") }else{ println("개발자 아님") } //코틀린의 if..else는 표현식이다. //자바의 if..else는 구문이다 val age: Int = 10 val str = if(age > 10){ "성인" }else{ "아이" } //코틀린은 삼항 연산자가 없다(if..else가 표현식으므로 불필요 하다) val a = 1 val b = 2 val c = if(b > a) b else a } if - else 구문이 자바와는 달리 식이다(자바는 구문이다) 식이므로 값을 반환한다. 표현식이므로 삼항 ..

함수

//기본적인 함수 선언 스타일 fun sum(a: Int, b: Int): Int { return a + b; } //표현식 스타일 fun sum2(a: Int, b: Int): Int = a + b //로직 없이 표현식이 들어간다 //표현식 & 반환타입 생략 fun sum3(a: Int, b: Int) = a + b //반환 타입도 생략할 수 있다(컴파일러가 반환타입을 추론) //몸통이 있는 함수는 반환 타입을 제거하면 컴파일 오류 fun sum4(a: Int, b: Int) : Int { return a + b //반환 타입을 제거하면 오류가 발생하게 된다. } //반환타입이 없는 함수는 Unit을 반환한다. fun printSum(a: Int, b: Int): Unit{ //아무 타입도 반환하지 않..

변수

var x = 5 //함수 외부에서, 변수 선언이 가능하다. //탑레벨 변수를 제공하기 때문에 클래스를 생성하지 않아도 쉽게 변수 선언이 가능하다. fun main(){ x += 1 println(x) val a: Int = 1 //타입 지정 val b = 1 //타입 생략(타입 추론 사용) val c: Int c = 3 //지연 할당(변수를 선언 후, 대입) /* val d //타입을 선언 하지 않고 대입시 컴파일 오류 d = 123 */ // val(value) : 자바의 final 키워드와 같이 한번 대입후 값 변경이 불가능하다 // var(variable): 값 대입 후에, 새로운 값 대입이 가능하다. //val e: String = "Hello"//값을 재할당 하게 되면 오류가 발생한다 -> v..