본문 바로가기

자바

(8)
JAVA Enum Enum JDK 1.5 이전의 자바에서는 열거체(enumeration type)를 사용할 수 없었다. 하지만, JDK 1.5부터는 C언어의 열거체보다 더욱 향상된 성능으로 사용할 수 있어졌다. Enum은 "연관된 상수들의 집합"이라고 표현되기도 하며 서로 관련된 상수를 편리하게 선언할 수 있다. 보통, 대문자 형태로 정의하며 중복되지 않아야 한다. 대체 왜 Enum을 사용할까?를 고민한다면 이유는 다음과 같다. 동등 연산자로 비교할 때 기존의 final static으로 선언한 상수와 달리 타입을 체크하여 비교해주기 때문에 타입 안전하다. 기존의 final static으로 선언한 상수는 변경 후 컴파일해야했지만 Enum의 경우 변경되더라도 재컴파일할 필요가 없다. 자 그러면 어떻게 Enum을 어떻게 사용하..
JAVA Generic 제네릭(Generic)이란 제네릭스(Generics)는 자바 J2SE 5.0 이후에 도입된 개념이다. 제네릭스는 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크를 해주는 기능이다. 클래스에서 사용할 타입을 클래스 외부에서 결정할 수 있다. 컴파일 시 타입 안정성을 제공한다.(의도하지 않은 타입의 객체의 저장을 막고 꺼내올 때의 오류를 방지한다.) 타입 변환을 하지 않아도 된다. 코드 가독성 및 재사용성이 높아진다. Collection에서 자주 사용된다. 제네릭(Generic) 사용방법 클래스 class Generic { public static void main(String[] args) { Box box = new Box(); box.setItem("GilSSang'..
JAVA Collection Collection이란 우리가 흔히 자바를 통해서 프로그래밍을 진행하다보면 다양한 자료구조를 사용한다. 우리는 자료구조를 사용하기 위해 당연스럽게 Collection에 있는 List, Set, Map 등을 꺼내 사용해온다. 이번 포스트에서는 이 Java Collection Framework에 대해서 살펴보려고 한다. Collection은 흔히 배열과 비교될 수 있다. 배열은 우리가 생성할 때 크기를 설정하여 정적으로 생성한다. 그에 따라, 우리가 배열의 크기는 사용하지 않더라도 이미 할당된 상태이고 배열의 크기가 부족할지라도 더이상 저장이 불가능하다. 위에서 말한 것과 비슷한 맥락이지만 우리가 배열 안의 데이터를 삭제하더라도 이미 배열의 메모리는 할당되어 있는 상태이다. 그에 비해, 컬렉션은 사이즈가 정..
JAVA Lambda, Functional Interface Lambda란 우리는 이전에 Stream API를 살펴봤었다. 그 포스트에서 알 수 있었듯이, Stream 연산들은 매개변수로 람다식을 사용했다. 그 이유는 Stream 연산들은 함수형 인터페이스를 받도록 되어있고 람다식은 함수형 인터페이스를 반환하기 때문이다. 우리는 Stream API를 확실하게 사용하기 위해서는 람다(Lambda)와 함수형 인터페이스(Functional Interface)에 대해서 알아야하기 때문에 중요하다고 할 수 있다. ​ 람다식은 JDK 1.8부터 추가되었다. 람다식의 도입으로 인해 자바는 객체지향언어인 동시에 함수형 프로그래밍 언어가 되었다. (람다식과 함수형 인터페이스의 이해를 위해 함수형 프로그래밍 언어에 대해서 알아볼 필요가 있다.[함수형 프로그래밍 링크] ) 우리는 이..
JAVA Exception 예외란 우리는 Exception에 대해 다루기 전에 Exception과 Error에 대해 명확히 짚고 넘어가려고 한다. Exception은 애플리케이션에서 참조하고 있는 값이 올바르지 않은 경우, 처리가 불가능한 경우 등 정상적인 프로그램의 구동 과정 중 어긋 난 경우에 나타난다. 그래서 우리는 이에 대한 처리를 직접 진행할 수 있다. Error는 어떤 무언가에 의해 비정상적인 프로그램의 구동이 발생할 때 나타난다. 우리는 이에 대한 처리를 애플리케이션에서 발생하는 부분이 아니라 JVM에서 발생하는 에러로 시스템 레벨에서 처리가 가능하다. 그렇다면, 자바에서의 예외 클래스 구조에 대해서 살펴보자. Exception과 Error 모두 Throwable클래스를 상속받아 구현되어있다. 그림에서 확인할 수 있듯..
Java Optional Optional이란 우리가 개발을 할 때 상당히 자주 마주치는 예외 중 하나가 바로 NPE(NullPointerException)일 것이다. 이러한, NPE를 피하기 위해서는 null인지를 체크해주는 로직을 "필히" 넣어주어야 한다. 하지만, if 문을 통해 null을 검사하는 것은 코드의 복잡성을 유발하고 가독성을 해칠 가능성이 크다. ​ 간단한 예를 하나 살펴보자. 만약, 학생의 이름과 나이를 저장할 수 있는 Student 객체가 있다고 하자. 학생은 이름은 필수로 입력해야하지만, 나이의 입력은 선택이라고 한다. 그리고 수업에 참가한다는 AttendClass()라는 메소드가 존재하고 이 메소드의 리턴 값으로 참여한 학생들의 나이들을 출력한다고 하자. 그렇다면, 수업에 참가하는 학생이 있고 학생들의 나..
Java Stream Stream이란 (1) Stream? Stream이란, 데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소이다. Stream은 순차적으로 혹은 병렬적으로 실행하여 데이터를 처리할 수 있다. Stream은 Collection, 배열, I/O 자원 등의 데이터 제공 소스로부터 데이터를 소비한다. Stream은 Collection과 마찬가지로, 특정 요소 형식으로 이루어진 연속된 값 집합 인터페이스를 제공한다. Collection의 경우 요소의 저장 및 접근 연산 중심이며, Stream의 경우에는 filter, sorted, map, distinct과 같은 데이터 처리 중심이다. ​ (2) Stream 특징 1.Stream은 수직적으로(위에서 아래로) 동작한다. arr.stream() .filter(...
JVM, JRE, JDK JDK, JRE, JVM JDK, JRE, JVM의 구조 JDK JDK는 자바 개발도구(Java Development Kit)의 약자이다. 우리가 일반적으로 자바로 개발하기 위해 설치하는게 바로 JDK이다. JDK는 JRE, JVM을 포함하고 있기에 JDK를 설치하면 자동으로 JRE, JVM이 설치되어 이를 사용할 수 있다. JDK에는 우리가 작성한 자바 문법을 컴퓨터가 이해할 수 있게 바꿔주는 자바 컴파일러(javac, java compiler)등을 포함하고 있다. jar, war와 같은 형태로 배포하여 JRE에서 이를 실행한다. ​ JRE JRE는 자바 실행환경(Java Runtime Environment)의 약자이다. 자바 언어로 작성된 프로그램을 실행하는 사용자들이 설치하는게 바로 JRE이다. J..