분류 전체보기 1341

타입 가드

interface Developer { name: string; skill: string; } interface Person { name: string; age: number; } //Developer도 반환할 수 있고, Person도 반환할 수 있다. function introduce(): Developer | Person { return {name: 'Tony', age: 33, skill: 'Iron Marking'} } var tony = introduce() // Developer, Person 모두 받을 수 있는 타입 //console.log(tony.skill) //skill이 없다고 나온다, -> 공통된 속성만 접근할 수 있기 때문에 if ((tony as Developer).skill) ..

타입 단언

//타입 단언(type assertion) var a; //var b = a; //a 타입(any)를 b에 타입을 넣는다. a = 20; a = 'a'; var b = a as string; //개발자가 봤을때, 해당 타입은 마지막에 대입한 값인 string 인것을 알기 때문에, 타입 단언을 이용해 타입을 지정할 수 있다 개발자가 해당 타입에 대하여 컴파일러보다, 많은 정보를 알고 있을 때, 해당 타입을 값을 지정할 수 있다. 여기서는 a 변수에 마지막에 대입한 타입인 string으로 a 타입이 지정될 것을 알고 b 타입에 string이라는 타입 단언을 선언할 수 있다. //DOM API 조작 var div = document.querySelector('div') as HTMLDivElement; //해..

타입 추론

타입 추론 기본 타입 추론이란 타입 스크립트가 코드를 해석해 나가는 동작을 의미한다. var a = 'abc'; //값을 어떤것으로 설정하냐에 따라 타입이 변경된다. function getB(b = 10) { //b값을 넘기지 않으면, 10이 할당 되며, 타입이 number로 추론된다 var c = 'hi' //c 타입은 string으로 타입추론이 일어났다 return b + c; //숫자 + 문자 = 문 } 인터페이스와 제네릭을 이용한 타입 추론 방식 //타입 추론 기본 2 interface Dropdown { value: T; title: string; } var shoppingItem: Dropdown = { //제네릭의 값을 타입스크립트가 추론한다 value: "abc", title: 'hello..

페어와 구조분해할당

페어 //f((1,3)) = 1 + 3 = 4 //함수에 하나의 인자로 들어온 것을 튜플이라고 한다 /* data class Tuple(val a: Int, val b: Int) fun plus(tuple: Tuple) = tuple.a + tuple.b */ fun plus(pair: Pair) = pair.first + pair.second fun main() { //val plus = plus(Tuple(1, 3)) val plus = plus(Pair(1, 3)) println(plus) val pair = Pair("A", 1) //pair.first = "B" //컴파일 오류 -> first,second 가 val로 되어있기 때문에 val newPair = pair.copy(first = "B..

지연 초기화

지연 초기화는 대상에 대한 초기화를 미뤘다가 실제 사용 시점에 초기화하는 기법을 말한다. 초기화 과정에서 자원을 많이 쓰거나 오버헤드가 발생할 경우 지연 초기화를 사용하는 게 유리할 수 있으며, 싱글톤 패턴에서 지연 초기화나 JPA의 엔티티 LazyLoading과 같은 곳에서 자주 사용된다. by lazy class HelloBot { //var greeting: String? = null val greeting: String by lazy(/*LazyThreadSafetyMode.NONE*/) { //LazyThreadSafetyMode.NONE 가 설정되어 있다면, 멀티스레드에 안전하지 않다 //LazyThreadSafetyMode.PUBLICATION 으로 설정되어 있다면, 동기화가 되지 않고 동작..

제네릭

fun main() { //제네릭을 사용한 클래스의 인스턴스를 만드려면 타입아규먼트를 제공 //val generics = MyGenerics("테스트") //val generics = MyGenerics("테스트") // 컴파일러가 제네릭 타입이 String 인것을 알기 때문에 생략 가능 //변수의 타입에 제네릭을 사용한 경우 val list1: MutableList = mutableListOf() //타입아규먼트를 생성자에서 추가 val list2 = mutableListOf() //스타 프로젝션을 사용 val list3: List = listOf("테스트") val list4: List = listOf(1,2,3,4) } 코틀린의 클래스는 자바와 마찬가지로 타입 파라미터를 가질 수 있다. 제네릭을 사..

제네릭

제네릭 기본 문법 /* function logText(text) { console.log(text) return text } logText(10) //10 logText('하이') //문자열 '하이' logText(true)//진위값 true */ function logText(text: T): T { console.log(text) return text } logText('하이') //파라미터 타입과 리턴 타입을 실행하는 시점에 넣어준다. 일반적으로 타입을 쓰지 않게 되면, 모든 타입을 받을 수 있는 any타입으로 선언된다. 제네릭 타입을 사용하게 되면, 런타임 시점에 파라미터 타입과 리턴 타입을 받을 수 있다 기존 타입 정의 방식과 제네릭 차이(함수 중복 선언의 단점) function logText(..

클래스

//ES2015(ES6) 문법 class Person{ //클래스 로직 constructor(name, age) { //초기화 console.log('생성 되었습니다') this.name = name; this.age = age } } var seho = new Person('세호', 30);//생성 되었습니다. console.log(seho) ES6 이상부터 사용 가능한 문법이다. constructor를 사용하면, 초기화 함수를 사용할 수 있다. 자바스크립트 프로토타입 https://developer.mozilla.org/ko/docs/Learn/JavaScript/Objects/Object_prototypes Object prototypes - Web 개발 학습하기 | MDN Javascript에서는..

이넘

이넘은 특정 값들의 집합을 의미하는 자료형이다. 타입스크립트에서는 문자형 이넘과 숫자형 이넘을 지원 한다. 숫자형 이넘 enum Shoes{ Nike, Adidas } var myShoes = Shoes.Nike; console.log(myShoes) //0 출력 //별도의 값을 입력하지 않으면 숫자형 이넘으로 취급한다. 특정 값들의 집합을 의미하며, 별도의 값을 입력하지 않으면 숫자형 이넘으로 취급 문자형 이넘 enum Shoes { Nike = '나이키', Adidas = '아디다스', } var myShoes = Shoes.Nike; console.log(myShoes) //나이키 출력 //별도의 값을 지정했기 때문에 해당 값으로 취긊한다. 별도의 값을 입력해 주었기 때문에 해당 값으로 취급하고, ..

연산자를 이용한 타입 정의

Union Type /* function logMessage(value: any){ console.log(value) } logMessage('hello') logMessage(100) // any일 경우 가능 */ function logMessage(value: string | number){ //유니온 타입 : 하나이상을 타입을 사용할 수 있다 console.log(value) } logMessage('hello') logMessage(100) any를 사용해 하나 이상을 타입을 받을 수 있다. | 연산자를 사용해 하나 이상을 타입을 받을 수 있고, 이를 유니온 타입이라고 한다. Union Type의 장점 var seho: string | number | boolean function logMessa..