반응형

전체 글 67

중간 회고

- 리브햇으로 이직하고 프로젝트 기준 나의 스택을 정리하면 아래로 정리할 수 있겠다. (파이썬은 홈페이지 리뉴얼 프로젝트할 때 제외하고 계속 쭉 해오긴 했지만) 파이썬 - Java & Javascript - Typescript - Kotlin - 우선 제일 먼저 드는 생각은 Typescript를 하고 Kotlin으로 넘어갔다는게 얼마나 큰 행운인지 모른다. 바로 넘어갔다면 야근을 하지 않는 다면 삽질을 할 시간이 부족하다는 회사 특성 상 진짜 힘들었을지도 모른다. 물론 코틀린이 자바와 파이썬의 중간이라고 생각할 수는 있겠지만 개발할 때 체감되는 파이썬과 가장 큰 차이점은 Type에 대한 처리였다. (대표적으로 NPE) - 하지만 다행히 올해 플랫폼 프로젝트 ERP UI쪽은 기존처럼 자바스크립트가 아니라 ..

코틀린에서의 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) 로 확실하게 잡아주고 사용해야 컴파일에러가 나지 않는..

REST API 생성 규칙

요즘 거의 API 담당으로 생성하고 있는데 체크해야 할 사항 정리할겸 남긴다. 후행 슬래쉬는 포함되지 않아야 한다. (마지막이 '/'로 끝나면 안 된다.) 계층 관계를 나타낼 땐 '/'로 구분한다. Ex: ID값이 52인 게시판의 게시물이면 ~~~/board/52로 작성한다. 가독성을 위해 하이픈(-)을 사용한다. 이건 나도 몰랐던 거.. 그냥 습관적으로 underbar로 써서 사용했는데 4번째 규칙이 Underbar 사용 금지임 ㅋ underbar ( _ ) 사용 금지 브라우저 상에서 URL을 보여줄 때 클릭 가능하다는 뜻으로 underlined 처리를 할 경우가 있는데 이 때 혼란을 방지하기 위해 underbar는 지양한다. 소문자를 사용하도록 한다. 파일 확장자가 들어가지 않도록 한다. 명사에 대한..

개발 일반 2020.10.17

객체에 관하여

- 객체 (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와 ..

Generic

Generic : class나 fun에서 사용하는 자료형을 외부에서도 지정할 수 있게 하는 기능 - 위의 예시 처럼 class A와 A를 상속받는 Class B가 있을 때 UsingGeneric function에서 up-casting을 통해 type을 A class로 선언해줘도 코드는 돌아감. 하지만 그렇게 하면 casting 자체가 속도 저하의 요소가 되기 때문에 T라는 generic을 사용하여 casting 발생하는 것을 방지하여 더 성능은 높아진다. (Generic을 사용할 경우 자동으로 Type을 추론하기 때문에 casting 하지 않는다.)

카테고리 없음 2020.10.11

고차 함수

- 고차 함수 : 함수를 클래스에서 만든 인스턴스처럼 사용하는 것을 말한다. 즉 함수를 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..

반응형