목록Java (22)
여행을 개발하다
프로그래머로서 가장 많이 접하게 되는 오류 중 하나는 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(컬렉션 프레임워크)란? 프로그래밍을 할 때면, 우리는 일반적으로 발..
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란 우리가 음식물을 포장할 때 쓰는 '래퍼(호일이라고 말하는 게 좀 더 이해하기 쉬우려나...?)'를 의미한다. 자바에 맞게 의역하면 기본타입을 객체 형태로 '포장'하는 것을 의미한다. 처음 래퍼 클래스라는 단어..
Spring Boot 개발 환경에서 정적 자원에 대한 접근 설정에 대해 이야기하고자 한다. 웹(WEB) 환경에서 클라이언트와 서버는 서로 자원들을 주고받는데, 이 자원들의 속성은 크게 '동적이냐 정적이냐'에 따라 동적 자원(Dynamic Resource)와 정적 자원(Static Resource)로 구분한다. ※ 동적자원 vs 정적자원 동적자원(Dynamic Resource)이란, 프로그램을 실행하기 위해 자원을 배당할 시 적용되는 기준에 따라 결정되는 배당기법이다. 가령 우리가 구글, 네이버와 같은 포털이나 유튜브에서 실시간으로 업로드되고 변하는 정보(뉴스나 날씨)를 볼 수 있는데, 이런 것들이 모두 동적 자원의 한 형태라고 볼 수 있다(좀 더 정확히 말하면, 동적 페이지를 열람하는 것이다). 반면, ..
안녕하세요!! 오늘은 Java Class를 사용하여 Bean을 생성하는 법에 대해 알아보겠습니다. 지난 시간까지는 별도의 xml 파일을 따로 만들었지만, 이번에는 Java Class 그 자체로 해결할 수 있는 방식을 소개합니다. 역시 어떤 방식을 사용할지는 자유롭게 선택하시면 됩니다. 이번에 소개하는 방식은 별도의 xml 파일을 사용하지 않으므로, 모든 것을 class로 해결합니다. 먼저 3개의 class를 생성할 예정이며, 목록은 다음과 같습니다. 1. 학생 정보를 기억할 class(class 이름 : student). 2. student의 객체, 즉 bean 역할을 할 class(xml 파일 대신 사용). 3. bean을 호출하여 출력할 Main class. ① 학생 정보를 기억할 class(clas..
안녕하세요! 오늘은 지난 포스팅에 이어 '멤버 변수로 ArrayList가 포함된 객체를 초기화하는 방법'과, '생성자로 초기화하는 방법'에 대해 알아보고자 합니다. 이해가 조금 어려우시다고요? 지난 번 임의로 student 클래스를 만들어서 예제를 보여드렸었는데, 여기서 추가로 한 학생의 '취미(hobby)'까지 멤버 변수로 넣는다고 가정하겠습니다. 물론, 취미는 한 개이면 다행이지만, 그렇지 않을 경우를 상정해서 여러개를 받도록하죠. 그래서 변수 또한 ArrayList 자료형이 되고요, 변수명은 간단히 'hobby'로 지정합니다. 멤버 변수 초기화도 setter 대신에 생성자로 초기화할 수 있도록, 기본 생성자와 함께 또다른 생성자를 하나를 더 만들어주었습니다. 여기까지 완료되었다면, 기존에 해왔던 방..