분류 전체보기 (15) 썸네일형 리스트형 [Kotlin] Null을 대하는 자세: 꼬리표(Nullable)와 세계관의 분리 코틀린을 사용하는 가장 큰 이유 중 하나는 바로 Null Safety입니다. 자바 개발자들을 수십 년간 괴롭혀온 NullPointerException(NPE)이라는 "10억 불짜리 실수"를 해결하기 위해, 코틀린은 과연 어떤 방식을 택했을까요? 코틀린의 철학: "세계관을 둘로 쪼개다"코틀린의 타입 시스템은 근본적으로 두 개의 세상으로 나뉘어 있습니다.Null을 담을 수 있는 세상 (Nullable)Null을 절대 담을 수 없는 세상 (Non-Nullable)이 두 세상은 상속 계층 구조(Hierarchy)의 최상위부터 다릅니다.Any: Null이 아닌 모든 타입(String, Int, User 등)의 최상위 부모입니다. 여기엔 죽어도 null이 들어갈 수 없습니다.Any?: Null을 포함한 모든 타입의.. [Kotlin] 컬렉션(Collection) vs 시퀀스(Sequence): 함수형 API와 동작 원리 심층 분석 Kotlin in Action을 읽다보면 6장 "컬렉션과 시퀀스"에서 '컬렉션에 대한 함수형 API'라는 제목을 마주하게 됩니다. 단순히 유틸리티 함수라고 부르지 않고 굳이 '함수형'이라는 수식어를 붙인 데에는 분명한 이유가 있습니다.이번 글에서는 코틀린 컬렉션 API에 녹아있는 함수형 프로그래밍의 철학(Side Effect, 순수 함수)부터, 비슷해 보이지만 완전히 다른 Sequence와 Iterable의 내부 동작 원리, 그리고 빅데이터 처리 패턴과의 연관성까지 이야기 해보겠습니다.1. 함수형 API: Side Effect의 격리와 선언형 스타일함수형 프로그래밍의 핵심 중 하나는 부수 효과(Side Effect)를 제어하는 것입니다. 코틀린의 컬렉션 API는 이 철학을 충실히 따릅니다.Side Eff.. 람다에 대해서 알아보자 - 1편 (탄생배경, 변수캡쳐, 함수타입) 람다란프로그래밍 언어에서 람다는 익명 함수(Anonymous Function)를 의미합니다. 수학자 알론조 처치(Alonzo Church)가 1930년대에 고안한 람다 계산법(λ-calculus)을 기반으로 합니다. 람다 계산법(λ-calculus) - 계산을 표현하기 위해 함수에 명시적인 이름을 부여하지 않고 취급하는 개념 람다의 탄생배경1. 익명 클래스를 대체한다.2. 코드 블록을 데이터로 취급한다. (함수를 일급 객체로서 취급) 람다는 익명 내부 클래스를 만들지 않아도 되게 만들어준다.예시 1: Comparator 전달// Java 7 스타일: 익명 내부 클래스 사용Collections.sort(list, new Comparator() { @Override public int compare(Stri.. 싱글톤 패턴 정의하나의 클래스에 대한 인스턴스를 하나만 가진다.어디에 쓸까?무상태 객체나 설계상 유일해야 하는 시스템 컴포넌트를 Singleton으로 만들어야 한다.예를 들어 서버의 각 로직을 담당하는 오브젝트들(controller, service 등)이 클라이언트에서 요청이 들어올 때마다 새로 생성된다고 생각해보자. 클라이언트의 요청이 증가할수록, 로직을 담당하는 오브젝트들의 개수도 기하급수적으로 늘어날 것이다 Spring 서버 환경에서 오브젝트(bean)들을 Singleton으로 생성한다. 싱글톤 패턴 In JAVAclass Singleton { private static class singleInstanceHolder { private static final Singleton INSTANCE .. Index는 왜 B-Tree를 사용하나 개요DB 사용시 반드시 사용하게 되는 인덱스에 대해서 알아보려고 한다. 인덱스란?인덱스는 데이터 저장, 수정, 삭제에 대한 성능을 희생시켜 탐색에 대한 성능을 대폭 상승하는 방식 그리고 인덱스는 B-Tree(Balanced Tree)를 사용한다. 트리의 노드가 편향되는 worst case를 방지하기 위해서 우리는 밸런스 트리(Balanced Tree)를 이용할 수 있다 밸런스 트리?트리의 노드가 한 방향으로 쏠리지 않도록, 노드 삽입 및 삭제 시 특정 규칙에 맞게 재 정렬되어 왼쪽과 오른쪽 자식 양쪽 수의 밸런스를 유지하는 트리이다. 항상 양쪽 자식의 밸런스를 유지하므로, 무조건 O(logN)의 시간 복잡도를 가지게 된다. 다만 재정렬되는 작업으로 인해 노드 삽입 및 삭제 시 일반적인 트리보다 .. Ajax에 대해서 알아보자 개요Ajax에 대해서 알아보기 전에, Ajax는 특정 기술이 아닌 웹 페이지에서 웹서버에 접근하는 기술의 묶음(JS,XML등..)을 지칭하는 용어이다.AJAX란 (Asynchronous JavaScript And XML) 그 이름에서도 알 수 있듯이 비동기 자바스크립트와 XML을 의미한다. [출처] Motivatation & History기존의 전통적인 웹 어플리케이션은 2가지 문제가 있었는데, 사용자가 새로운 요청을 서버에 보내면 웹 페이지 전체를 서버에서 보내주어, 이로 인해 페이지 단위로 업데이트를 할 수 밖에 없었다. 뿐만 아니라 페이지가 업데이트 되는 동안 브라우저가 먹통이 되는 Synchronous 문제가 있었다. 사실 Ajax라는 용어가 등장하기 전에도 수 많은 개발자들이 이를 해결하기 위.. 간략하게 알아보는 docker 개념 개요서버 배포시 거의 필수가 되어버린 docker에 대해 짤막하게 알아보자. docker의 등장배경과 가상머신과의 비교를 통해 docker의 장점에 대해 알아보려고한다. Docker란?docker는 "컨테이너 기반의 가상화 도구"이다. 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있게 도와준다. 여기서 보다 자세히 알아볼 키워드는 컨테이너와, 가상화이다. 컨테이너docker는 서버 런타임에 필요한 모든 것들을 도커 이미지로 빌드하게 되면 이를 컨테이너 단위로 실행, 중지 시켜준다. 위의 그림을 보면 웹서버 구동에 필요한 코드, node, dependencies, 환경변수등 모든 것이 빨간색 컨테이너에 담겨 있다는 것을 알 수 있다. 가상화가 필요한 이유AWS 비용이 부담이 되어 집에서 사용하고 있.. Redis의 자료구조 (List, Sorted Set) 개요오늘은 Redis의 자료구조 중에 List와 Sorted Set에 대해서 알아보려고 한다. List레디스 List는 문자열 값들의 linked list이다.Redis lists are linked lists of string values. list를 구현하는 방법은 2가지가 있다.ArrayLinked List 그리고, Array와 Linked List는 요소를 삽입 및 삭제, 요소 탐색간에 시간복잡도의 차이가 있다. Array와 Linked List의 작업별 시간복잡도는 아래와 같다. 시간복잡도의 차이가 나는 이유1. 요소의 삽입 먼저, 특정 요소를 중간에 삽입하는 경우에 대해서 알아보자. Array 중간에 25라는 새로운 요소를 삽입하는 경우에는, 삽입하고자 하는 위치 뒤에 있는 모든 요소들을 .. 이전 1 2 다음