반응형

Backend 언어/Kotlin 8

코틀린에서의 Null Safe 처리

- 다른 글에서도 계속 말하지만 코틀린은 Null을 기본적으로 허용하지 않는다. 모든 변수, 속성에 대해 default로 Nonnullable로 되어 있으며 ?를 통해 nullable 선언을 따로 해주어야 한다. var nullableVariable: String? = "dlwlrma" var nonNullableVariable: String = "dlwlrma" nullablevariable = null nonNullableVariable = null // 컴파일 에러 - nullableVariable 과 같은 nullable instance 안의 property나 function을 사용하려고 하면 if(nullableVariable != null) 로 확실하게 잡아주고 사용해야 컴파일에러가 나지 않는..

객체에 관하여

- 객체 (Object) : 특정 객체 안에 있는 funtion이나 property를 생성자 없이 사용하기 위해 class 대신하여 만드는 객체 - 이렇게 만들어진 Object는 최초로 선언될 때 생성되어 사용되며 그 이후에는 선언을 해줘도 새로 생성되는 것이 아닌 계속 재활용되어 사용된다. object CarFactory { val cars = mutableListOf() fun makeCar(horsepowers: Int): Car { val car = Car(horsepowers) cars.add(car) return car } } class Car(power: Int) { } 위의 코드 처럼 생성하여 선언해주면 그 이후에 CarFactory를 불러줄 때 생성되어 계속 사용된다. -----> 이를 ..

변수에 관하여

- 코틀린에서는 변수에 null을 허용해주지 않는다. 그렇기 때문에 Null이 될 수 있으면 compile전에 미리 NPE를 떨어트리며 서버가 올라가고 나서 NPE가 나는 것을 최대한으로 방지해준다. - 처음에는 이게 상당히 불편했는데 최근 파이썬 서비스와 코틀린 서비스가 돌아가면서 발생하는 에러의 정도가 다르다 (실제로 파이썬은 지난주에 NPE가 떨어졌음... 애시당초 Null이면 안 되는 데이터가 다른 오류로 인해 Null이 되면서 발생한 NPE이긴 한데 그래도 ㅎㅎ 사전에 NPE 방지가 됐었으면 에러 자체가 나진 않았을꺼임) 변수의 종류 : 최근 Typescript도 같이 개발하면서 본 const/let 개념과 동일함 val : 불변하는 변수로 변수 값을 초기화하는 것만 가능하다. 문맥상으로 처음 ..

Class에 관하여

- Class란 : 값(property)와 그 값을 사용하는 기능(function)들을 묶어 놓은 것이다. 그리고 이러한 클래스를 통해 생성된 것이 객체, instance임 - 함수 생성자 함수 호출 시 function을 실행해주고 싶으면 fun 없이 ' init { ~~ } ' 와 같이 처리해주면 된다. - 기본적으로 생성자란 class를 선언해줄 때 필요한 변수들을 넣어주는 것을 말함 - 이와 같이 보조 생성자를 선언해주면 Person('황선재')로 하면 constructor를 타서 instance가 생성이 된다. - class 상속 특정 클래스를 다른 클래스가 상속 받을 수 있게 해주려면 class앞에 open을 써주면 된다. 유의할 점 sub class는 super class의 property와 ..

고차 함수

- 고차 함수 : 함수를 클래스에서 만든 인스턴스처럼 사용하는 것을 말한다. 즉 함수를 parameter로 받거나 result 값으로 받는 것 - 고차함수를 이용하여 function을 param으로 넘길 때는 :: 를 function name 앞에 써주면 된다. 그리고 function을 param으로 받는 function(예시에서는 fun b) param에는 Type에 'function 명' : ('내부 function param Type') -> '내부 function result type' 을 명시 해주시면 된다. (Return이 없는 void함수는 Unit을 쓰면 된다.) - 위의 예시에서 람다 함수를 이용한다면 더 간단해진다. (val c) - val c가 a를 람다함수로 바꾼 코드임. type은..

접근 범위와 접근 제한

접근 제한자에 대해 들어가기 전에 Scope에 대한 개념을 잡아야 함 - Scope란? : 언어 차원에서 변수, 함수, 클래스와 같은 객체들을 서로 공유하여 사용할 수 있는 범위를 지정해두는 단위 Ex) 패키지 내부에서 공유, 클래스 내부에서 공유, 함수 내부에서 공유 Scope 규칙 스코프 외부에서는 스코프 내부의 값은 참조연산자로만 접근이 가능하다. Ex) customer.name 이렇게 name 값을 받는거 처럼 customer라는 참조연산자를 통해 접근 동일 패키지 안에서는 사용 가능하다 하위 Scope에서 상위 Scope의 값을 재정의 할 수 있다. (val을 통해 재선언해줘서 사용) - 접근 제한자 : Scope 외부에서 Scope 내부에 접근할 때 그 권한을 개발자가 제한하는 것 종류 : p..

프로젝트 구조

프로젝트? - 어플리케이션들을 담는 큰 틀 프로젝트 구조는 물리적인 구조와 논리적인 구조로 나누어 생각할 수 있다. 물리적인 구조 모듈 : 하나의 프로젝트는 여러 개의 모듈로 이루어지며 직접 만들 수도, 라이브러리 모듈을 가져와 사용할 수도 있다. 이 모듈 안에 폴더 및 파일들로 구성되어 있다. 논리적인 구조 패키지 : 개발 시 소스코드의 소속을 지정하기 위한 논리적 단위 보통 패키지의 이름은 도메인을 거꾸로 배열하고 그 뒤에 프로젝트 명을 붙여 기능들을 그 뒤에 넣는다. [이 때 패키지와 폴더는 각각의 다른 구조의 개념이기 대문에 패키지 명과 폴더명을 일치시키지 않아줘도 된다.] --> 하나의 폴더 안에 여러 클래스를 넣어줘도 되는 이유임 대신 클래스 내부에서 선언해주는 package 대로 묶인다. e..

Kotlin 시작

- 새로운 프로젝트를 하면서 이번엔 Kotlin을 통해 React로 구성되는 프론트가 사용할 API를 만들게 되어 내용 정리 시작 - 우선 코틀린은 오라클이 자바를 관리하던 썬마이크로를 인수하면서 JDK에 대해 유료화 정책을 실시하였고 구글에게 사용료를 요구하였고 이 과정에서 개발된 언어다.(Java 자체는 무료로 사용가능하였지만 JDK가 호환이 되지 않았기에 구글은 그냥 자바 언어 자체를 대체할 언어를 개발한 것) 이렇게 때문에 JVM상에서 동작하는 언어로 쉽게 보면 java 개선된 버전이라고 할 수 있다. (개선이라고 하면 또 애매한 부분이 있지만 후에 다룰 람다 지원, ; 미사용 등을 생각한다면 개선이라고 보는게 맞는 것 같다) 그리고 JS기반으로 이루어져있기 때문에 풀스택이 가능하다. - 그리고 ..

반응형