분류 전체보기 1341

스프링 부트

스프링 부트 스프링 부트는 최소한의 설정으로 프로덕션 규모의 애플리케이션을 쉽게 만들 수 있게 설계된 오픈 소스 프레임워크이다. 스프링 부트 소개 페이지에서는 스프링 부트를 'just run' 이란 문장으로 소개한다. 톰캣, 제티, 언더 토우와 같은 서블릿 컨테이너를 내장하고 있어 별도의 웹서버가 없어도 독립 실행이 가능하고 또한 복잡한 의존성과 설정을 자동화한 스프링 부트 스타터를 추가하면 쉽게 프레임워크를 등록, 사용할 수 있다. 스프링 VS 스프링 부트 스프링 부트는 스프링의 범주에 있는 하나의 프로젝트이다. 스프링 자바 진영에서 가장 유명한 프레임워크 경량화, IoC/DI, AOP, 다양한 프레임워크와의 통합 등 여러 장점을 가지지만, 간단한 애플리케이션을 개발하기 위해서도 번거로운 환경설정을 해..

람다로 프로그래밍하기

함수형 프로그래밍 함수형 프로그래밍은 수학의 함수적 개념을 참고해 만든 패러다임의 하나로, 깔끔하고 유지보수가 용이한 소프트웨어를 만들기 위해 함수를 사용한다. 함수형 패러다임은 부수효과가 없고, 똑같은 input이 들어오면 항상 같은 output을 내놓은 순수 함수의 개념을 기반으로 람다, 고차 함수, 커리, 메모이제이션, 모나드 등의 개념을 포함한다. 함수를 값으로 사용하기 fun main() { /* //코틀린에서 제공하는 함수형 프로그래밍 val list = mutableListOf(printHello) //리스트에 값으로 함수를 넣을 수 있다. //list[0]() //함수를 실행할 때는 함수 실행 표기법인 ()를 반드시 써야한다 val func: () -> Unit = list[0] func(..

고급 예외처리

Use public class Java_TryWithResources { public static void main(String[] args) { try (FileWriter writer = new FileWriter("test.txt")) { writer.write("Hello Java"); } catch (IOException e) { System.out.println(e.getMessage()); } } } 자바 7 이상부터는 try-with-resources 구문을 사용하면, 자동으로 리소스를 close 처리해준다. try에 전달할 수 있는 자원은 AutoCloseable 인터페이스의 구현체로 한정 Closable or AutoClosable 인터페이스 구현체에 대해서만, close메서드를 호출 ..

스코프 함수

코틀린의 표준 라이브러리에는 객체의 컨텍스트 내에서 코드 블록을 실행하기 위해서만 존재하는 몇 가지 함수가 포함되어 있고, 이를 스코프 함수라고 한다. 스코프 함수를 제대로 사용하면, 변수 선언이 없어지며, 코드를 더 간결하고 읽기 쉽게 만든다. 스코프 함수의 코드 블록 내부에서는 변수명을 사용하지 않고도 객체에 접근할 수 있는데, 그 이유는 수신자 객체에 접근할 수 있기 때문이다. 수신자 객체는 람다식 내부에서 사용할 수 있는 객체의 참조이다. 스코프 함수를 사용하면, 수신자 객체에 대한 참조로 this 또는 it를 사용한다. 스코프 함수 종류 총 5개의 유용한 스코프 함수를 제공하며, 각 스코프 함수들은 유사한 기능을 제공한다. 함수명 수신자 객체 참조 방법 반환 값 확장함수 여부 let it 함수의..

ES6 최신 문법

구조 분해 문법 매번 호출되는 json객체의 접근 방식의. 연산자를 통해 접근하는 것이 아닌 한 번에 초기화할 수 있는 문법 //ES6 최신 문법 function fetchData() { return { data: { name: 'capt', age: 100, }, config: {}, statusText: '', headers: {}, }; } //변수로 받아 접근 해야한다 const result = fetchData(); console.log(result.data); console.log(result.config); //구조 분해 할당 const { data, config, statusText } = fetchData(); //한번에 접근해 변수에 초기화 가능 console.log(data); con..

JS에 TS 적용하기

자바스크립트 코드에 타입스크립트를 적용할 때 주의해야 할 점 기능적인 변경은 절대 하지 않을 것 테스트 커버리지가 낮을 땐 함부로 타입스크립트를 적용하지 않을 것 처음부터 타입을 엄격하게 적용하지 않을 것 (점진적으로 strict 레벨을 증가) 타입스크립트 프로젝트 환경 구성 프로젝트 생성 후 NPM 초기화 명령어로 package.json 파일을 생성. 프로젝트 폴더에서 npm i typescript -D로 타입스크립트 라이브러리를 설치. 타입스크립트 설정 파일 tsconfig.json을 생성하고 기본 값을 추가 서비스 코드가 포함된 자바스크립트 파일을 타입스크립트 파일로 변환 타입스크립트 컴파일 명령어 tsc로 타입스크립트 파일을 자바스크립트 파일로 변환 엄격하지 않은 타입 환경(loose type)에..

맵드 타입

맵드 타입이란 기존에 정의되어 있는 타입을 새로운 타입으로 변환해 주는 문법을 의미한다. 마치 자바스크립트 map() API 함수를 타입에 적용한 것과 같은 효과를 가진다. https://github.com/Microsoft/TypeScript/pull/12114 Mapped types by ahejlsberg · Pull Request #12114 · microsoft/TypeScript This PR introduces Mapped Types, a new kind of object type that maps a type representing property names over a property declaration template. In combination with index types and ..

유틸리티 타입

유틸리티 타입은 이미 정의해 놓은 타입을 변환할 때 사용하기 좋은 타입 문법입니다. 유틸리티 타입을 꼭 쓰지 않더라도 기존의 인터페이스, 제네릭 등의 기본 문법으로 충분히 타입을 변환할 수 있지만 유틸리티 타입을 쓰면 훨씬 더 간결한 문법으로 타입을 정의할 수 있습니다. Pick interface Product { id: number; name: string; price: number; brand: string; stock: number; } //상품 목록을 받아오기 위한 API 함수 function fetchProducts(): Promise { const products:Product[] = []; return new Promise(function (resolve) { resolve(products)..

타입 모듈화

타입 스크립트에서 가리키는 모듈이라는 개념은 ES6+의 Modules 개념과 유사하다. 모듈은 전역 변수와 구분되는 자체 유효 범위를 가지며 export, import와 같은 키워드를 사용하지 않으면 다른 파일에서 접근할 수 없다. app.ts import {Todo} from './types' var item: Todo = { //import한 타입을 사용할 수 있다 title: '할 일 1', checked: false } types.ts //app.ts 파일을 그대로 사용 export interface Todo { title: string; checked: boolean; } app.ts 에서 import를 통해 types의 인터페이스를 사용할 수 있다. Import와 Export https://j..

타입 호환

타입 호환이란 타입 스크립트 코드에서 특정 타입이 다른 타입에 잘 맞는지를 의미한다(타입 스크립트에서는 내부 속성을 타입을 가지고 구분하기 때문에 가능하다) 인터페이스, 클래스 타입 호환 //인터페이스 interface Developer { name: string; skill: string; } interface Person { name: string; } class Person{ name: string } var developer: Developer; var person: Person; //왼쪽 타입이 더 크기 때문에 오류가 발생한다. //developer = person //오류 -> person은 name만 developer는 name,skill 두가지 타입을 가지고 있기 때문에 대입이 불가능 pe..