목록BackEnd (47)
여행을 개발하다
프로그래머로서 가장 많이 접하게 되는 오류 중 하나는 Null Pointer Exception 일 것이다. 나 또한 이 예외 처리를 하기 위해서 수많은 if 문을 사용했던 것 같다. 하지만 조건문이 많아지면 많아질수록, 코드가 복잡해지고 유지 보수가 어려워지는 것은 두말하면 잔소리다. 이번 프로젝트에서 자바 8의 새로운 문법들을 많이 배운 것 같은데, 그중 하나가 Null Pointer Exception을 깔끔하게 처리하기 위한 Optional이라는 래퍼 클래스이다. 1. Optional 이란? - Null Pointer Exception(이하 NPE)에 대한 말끔한 처리를 위해 Java8부터 등장한 래퍼(Wrapper) 클래스이다. - Null 값에 대해 바로 예외 발생을 시키지 않고, 상황별로 대체값..
1. TreeMap이란? - 이진 탐색 트리(binary search tree)의 일종인 'Red-Black Tree'를 기반으로 하는 ‘key = entry’ 형식의 Map 컬렉션이다. Red-Black Tree - 일반적인 Tree 형태의 자료구조에서는 Tree의 높이가 클수록 데이터의 탐색시간이 길어진다. 또한, 데이터가 한쪽으로만 입력되어 치우진 구조가 된다면 전체 효율이 매우 떨어질 수 있다. 이를 보완하여 고안된 것이 Red-Black Tree이다. Red Black Tree의 주요 특징은 Root를 기준으로 작은 값은 왼쪽 서브 노드에, 더 큰 값을 오른쪽 서브 노드에 배치한다는 것이다. 복잡한 자료구조이긴 하나, 실사용에서 효율적이기 때문에 최악의 상황에서도 우수한 실행 시간을 담보할 수 ..
Java의 Iterator 인터페이스에 대해 공부해보았다. Iterator를 우리 말로 번역하면 '반복자'로, 객체 지향 프로그래밍에서 배열과 같은 여러 개의 데이터의 집합으로 이루어진 자료구조를 순회하는 객체를 의미한다. 자바의 Iterator 인터페이스는 컬렉션 프레임워크에 저장된 요소들을 순회하여 읽어오는데 사용되는데, 어떤 컬렉션 프레임워크라도 읽어볼 수 있는 표준화된 방법을 제공한다. 물론, 대표적인 제어문인 for, while 문으로도 반복문을 얼마든지 가능하지만, Iterator는 '표준화된 방법을 제공'한다는 점에서 다형성을 구현하고자 했다. 그렇다면 컬렉션 프레임워크는 무엇일까? 1. Collection Framework(컬렉션 프레임워크)란? 프로그래밍을 할 때면, 우리는 일반적으로 발..
너무 습관적으로만 사용했던 HttpServletRequest 인터페이스에 대해 공부해보았다. 인터페이스명을 그대로 뜯어보면 Http + Servlet + Request인데, Http는 프로토콜, Request는 말 그대로 요청이다. Servlet은 익히 들어왔지만 이의 정확한 의미와 작동 원리는 무엇일까... 본격적으로 HttpServletRequest에 대해 이야기하기 전에 간단하게 정리를 해봤다. 1. Servlet 정확히 말하면 'Java Servlet'을 의미하는데, 자바를 사용하여 동적으로 웹 페이지를 만들어주는 서버 측 프로그램 혹은 사양을 의미한다. (참조 : 위키백과, 검색어 : 자바 서블릿) 일반적으로 불리는 웹 서버(Web Server)는 클라이언트의 요청에 정적인 페이지(Javascr..
1. 스레드의 정의 Thread(스레드)의 사전적 의미는 '프로세스 혹은 프로그램을 구성하는 흐름의 단위'이다. 프로세스나 프로그램은 하나의 단일 스레드로 구성되어 있을 수도 있고, 2개 이상의 여러 개의 스레드로 구성될 수도 있다. 전자를 싱글 스레드(Single Thread), 후자를 멀티 스레드(Multi Thread)라고 한다. 2. 스레드의 특징 스레드는 병렬성과 동시성이라는 특징을 갖는다. ① 병렬성(Parallelism) 다수의 코어가 각각에 할당된 스레드를 동시에 실행하는 특징 ② 동시성(Concurrency) 하나의 코어에서 여러 개의 스레드가 동시에 실행되는 특징 3. 자바에서 스레드 구현하기 자바는 멀티 스레드(Multi-Thread) 프로그래밍이 가능한 언어로서, 컴퓨터가 동시에 여..
자바의 자료형에는 총 8개의 기본 타입(primitive type)이 있다. byte, short, int, long, float, double, char, boolean 이렇게 선언한 자료형을 특정 메소드의 매개변수로 집어넣고자 한다. 그런데 해당 메소드는 매개변수로 객체 형태만 받는다고 한다. 이럴 때는 기본 타입을 '객체화'해서 매개변수로 전달해야 하는데, 이때 필요한 것이 '래퍼 클래스(wrapper class)'이다. 1. Wrapper Class(래퍼 클래스)란? 여기서의 wrapper란 우리가 음식물을 포장할 때 쓰는 '래퍼(호일이라고 말하는 게 좀 더 이해하기 쉬우려나...?)'를 의미한다. 자바에 맞게 의역하면 기본타입을 객체 형태로 '포장'하는 것을 의미한다. 처음 래퍼 클래스라는 단어..
오늘은 조건문 'If'와 'elif'에 대해 포스팅을 진행하겠습니다. (1) IF 우선, 다음과 같은 조건이 있다고 가정합니다. "수학 점수가 60점 이상인 사람은 집에 가고, 그렇지 않은 사람은 나머지 공부를 한다." 프로그래머가 60점 이하인 점수를 모두 리스트하여, 집에 갈 사람, 나머지 공부를 할 사람을 거르는 것이 가능하긴 하지만 엄청난 시간과 막노동(?)이 필요하다는 것이 분명합니다. 그래서 필요한 것이 바로 'if'라는 조건문입니다. if 조건문을 사용한다면, 컴퓨터가 참/거짓을 판단하여, 상황에 맞게 알맞은 값을 돌려주게 됩니다. if 문의 구성은 다음과 같습니다. if 조건 : 조건이 참일 경우, 수행할 문장 1 조건이 참일 경우, 수행할 문장 2 else : 조건이 거짓일 경우, 수행할..
오늘 포스팅은 파이썬의 산술 연산, 문자열 포맷팅에 관한 내용입니다. 우리가 흔히 알고 있는 산술 연산의 종류는 크게 4가지죠. 더하기, 빼기, 나누기, 곱하기. 하지만 파이썬의 산술 연산자는 무려 6개가 있습니다. 종류는 다음과 같습니다. +, -, *, /, //, % print 명령어를 적용하여, 다음과 같은 예시를 통해 결과값을 구해보겠습니다. 결과값은? 차례대로 2, 1, 6, 2.0, 2, 3이 구해졌습니다. 각각은 어떤 연산을 수행할까요? 1. + : 더하기 연산 2. - : 빼기 연산 3. * : 곱하기 연산 4. / : 나누기 연산 5. // : 나누기 후 몫의 소수점 자리를 버린다. 6. % : 나눗셈 후 나머지를 반환한다. 비교적 쉽게 이해할 수 있지만, '//'. '%'는 새롭게 접..