목록BackEnd/Java (19)
여행을 개발하다
프로그래머로서 가장 많이 접하게 되는 오류 중 하나는 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란 우리가 음식물을 포장할 때 쓰는 '래퍼(호일이라고 말하는 게 좀 더 이해하기 쉬우려나...?)'를 의미한다. 자바에 맞게 의역하면 기본타입을 객체 형태로 '포장'하는 것을 의미한다. 처음 래퍼 클래스라는 단어..
안녕하세요! 오늘 포스팅 할 내용은 'ArrayList'입니다. 배열의 길이는 정해져 있기도 하지만, 때에 따라서 유연하게 늘였다 줄였다 할 필요가 있습니다. 데이터가 추가되고 빠질 때마다 적당하게 메모리가 할당이 되어야 하기 때문이죠. 실제 실무에서도 불필요한 메모리 할당으로 메모리 누수 현상을 방지하기 위해, 배열의 길이는 대부분 정하지 않고 사용한다고 합니다. Java는 이러한 상황에서 배열을 동적 할당하기 위해, ArrayList라는 클래스를 활용합니다. 그럼 ArrayList를 어떻게 활용하는지, 지금부터 살펴보겠습니다. * 왜 동적 할당이 필요할까...? 본격적인 설명에 앞서, 왜 배열의 동적 할당이 필요한지 예제를 통해 살펴보겠습니다. 1과 2를 더한 값인 3을 출력하는 sum(arg)라는 ..
안녕하세요!! 오늘의 포스팅 주제는 '인터페이스(Interface)'입니다. 지난 포스팅에서 Java는 다중 상속이 금지되어 있으며, 그 이유를 C++에서 다중 상속 시 발생 우려가 있는 Diamond of Death 현상으로 설명하였습니다. 인터페이스(Interface)는 이러한 Java의 한계점을 보완하기 위해 마련된 기능이라고 보시면 됩니다. 즉, 다른 클래스를 상속 받은 서브 클래스들의 공통점을 추출해서 사용이 가능하도록 돕습니다. 그럼 지금부터 인터페이스의 특징에 대해 알아보겠습니다. 1. 인터페이스(Interface)의 정의 - 무조건 정적(static) 멤버 변수(상수)와 추상 메소드로만 구성되는 클래스의 특별한 형태. C++에서도 '어떤 클래스로부터 상속을 받을지'에 대한 모호성으로 다중 ..