삽질 주도 개발
article thumbnail
CheckedException, UncheckedException
Language(JVM) 2023. 2. 8. 02:30

오늘은 자바의 예외에 대해서 다뤄보려고 한다. 오라클에서는 예외를 다음과 같이 정의하고 있다. 예외는 프로그램 실행 중에 발생하여 프로그램 명령의 정상적인 흐름을 방해하는 이벤트입니다. 자바에서 예외는 Throwable을 상속한 모든 하위 객체들로 구성할 수 있다. 그리고 Throwable을 상속받은 Exception 객체와 Error 객체로 나눌 수 있다. 또 Exception 객체를 상속받은 RuntimeException(UncheckedException)과 그 외의 Exception(CheckedException) 객체들로 나눌 수 있다. 위의 구성을 각 섹션으로 나누어 알아보자. Error와 Excpetion Java에서는 예외와 오류는 모두 "Throwable" 클래스의 서브 클래스이며 프로그램..

article thumbnail
JDK 9 ~ 17 기능 정리
Language(JVM) 2022. 6. 29. 03:31

JDK9 ~ 17의 featrue들을 간략히 정리한다. Java 9 (2018년 3월 지원 종료) 자바 모듈화(JDK 모듈 분리 기능) try-with-resource 구문 개선 관리하고자 하는 자원 객체를 try 구문 외부에서도 선언 가능 final Scanner scanner = new Scanner(new File("testRead.txt")); PrintWriter writer = new PrintWriter(new File("testWrite.txt")) try (scanner;writer) { // omitted } interface private method 추가 default, static method에 대한 공통 로직을 공유하는 용도로 사용 Compact Strings (String 개선..

article thumbnail
JEP, JSR, JLS
Language(JVM) 2022. 6. 26. 17:57

Java version migration 중 아래와 같은 명세 관련 용어들을 접하는데, 각각의 용어들이 무엇을 뜻하는지 알아보도록 한다. JLS - Java Language Specification(자바 언어 명세서) 이름 그대로 자바라는 언어를 사용하기 위한 전반적인 규칙을 설명해주는 명세서이다. JLS는 자바를 사용하기 위한 문법과 정상적인/비정상적인 규칙들을 아주아주아주 상세하게 설명한다. https://docs.oracle.com/javase/specs/index.html Java SE Specifications Java Language and Virtual Machine Specifications Java SE 18 Released March 2022 as JSR 393 The Java Lang..

article thumbnail
자바의 정석 3판 2권 다시보기 - Thread(2)
Language(JVM) 2022. 3. 14. 18:59

Thread 구현 자바 스레드를 구현하는 방법은 2가지가 있는데, 공통점은 단순히 run 메서드를 오버라이딩하거나 구현을 하면 되는 것이다. 하지만, 두 가지의 방법은 스레드를 시작하는 문법이 조금 다르다. 그 차이는 아래의 코드를 보며 확인해보자. Thread class 상속 public class SubThread extends Thread { @Override public void run() { IntStream.range(0, 5).forEach(idx -> System.out.println("subThread: " + idx)); } } Runnable Interface 구현 public class RunnableImpl implements Runnable { @Override public v..

article thumbnail
자바의 정석 3판 2권 다시보기 - Thread(1)
Language(JVM) 2022. 3. 14. 12:40

프로세스 프로세스는 일반적으로 CPU에 의해 처리되는 프로그램을 의미한다. 또한, 이 프로세스는 단순히 한마디로 정의할 수 있는게 아니라 다양한 형태로 정의될 수 있다. 프로세스는 다음과 같이 여러 형태로 정의할 수 있다. PCB를 가진 프로그램 실기억장치에 저장된 프로그램 프로세서가 할당되는 실체로서, 디스패치가 가능한 단위 프로시저가 활동 중인 것 비동기적 행위를 일으키는 주체 지정된 결과를 얻기 위한 일련의 계통적 동작 목적 또는 결과에 따라 발생되는 사건들의 과정 운영체제가 관리하는 실행 단위 부가적으로 설명을 추가하자면, 메모리에 적재된 프로세스는 각각 독립된 메모리 영역(text, data, stack, heap의 구조)을 할당받는다. 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스..

article thumbnail
자바의 정석 3판 2권 다시보기 - Enum
Language(JVM) 2022. 3. 1. 22:24

Enum 정의 Enum(열거형)은 서로 관련된 상수를 편리하기 선언하기 위한 것으로 여러 상수를 정의할 때 사용하면 유용하다. 해당 기능은 JDK1.5부터 새로 추가되었다. 특징 자바의 열거형은 'type-safe enum'이라서 실제 값이 같아도 타입이 다르면 컴파일 에러가 발생한다. 여기서 중요한 건, 보통 상수의 값이 바뀌면, 해당 상수를 참조하는 모든 소스를 다시 컴파일해야하는데, 열거형은 기존의 소스를 다시 컴파일하지 않아도 된다. equals()가 아닌 '=='으로 비교가 가능하다. 즉, 성능이 매우 빠르다. 사용 public class EnumPractice { public static void main(String[] args) { System.out.println(NUMBER.valueO..

article thumbnail
자바의 정석 3판 2권 다시보기 - Generic
Language(JVM) 2022. 2. 20. 17:38

Generic 정의 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 compile-type type check 해주는 기능이다. 장점 타입 안정성 타입 체크와 형변환 생략 Collection class가 대표적인 예시로서, 다양한 종류의 객체를 담을 수 있지만 컬렉션에 들어갈 타입을 미리 제네릭으로 명시하여 다른 타입의 객체를 포함하는 것을 컴파일 시점에 확인할 수 있다. 선언 generic은 class와 method에서 선언할 수 있다. 클래스 제네릭 클래스를 선언하기 위해선 클래스 명 옆에 를 붙이면 된다. 그리고 타입 변수로 사용될 변수들의 타입을 T 로 바꿔준다. public class GenericsPractice { public static void main(String[] args) ..

article thumbnail
자바의 정석 3판 2권 다시보기 - Collection(2)
Language(JVM) 2022. 2. 20. 15:02

Set List와는 달리 저장 순서를 유지하지 않고 중복을 허용하지 않는다. 하지만, 순서를 유지하는 Set 구현체가 있긴 하다. (LinkedHashSet) hashSet HashSet은 내부적으로 HashMap을 이용해서 만들어졌고, 해싱을 통해 구현되어 이름이 HashSet add 연산 Set의 add 메서드는 새로운 요소를 추가하기 전 기존에 저장된 요소와 같은 것인지 판별하기 위해 요소의 equals()와 hashCode()를 호출한다. 그렇기 때문에 우리가 객체를 사용할 때 목적에 맞게 위 두 메서드를 오버라이딩을 해야 한다. class Person { String name; int age; public Person(String name, int age) { this.name = name; t..

article thumbnail
자바의 정석 3판 2권 다시보기 - Collection(1)
Language(JVM) 2022. 2. 19. 17:19

정의 데이터 군을 다루고 표현하기 위한 단일화된 아키텍처 핵심 인터페이스 Collections Framework에서는 컬렉션 데이터 그룹을 3가지의 인터페이스로 정의했다. 그 인터페이스는 List, Set, Map 으로 구분되며, List와 Set 컬렉션 클래스는 많은 공통 부분이 존재하기 때문에 공통된 부분을 추출하여 다시 Collection 인터페이스를 정의했다. 핵심 인터페이스에 대한 기능 List : 순서가 있는 데이터의 집합으로 데이터 중복을 허용한다. 구현 클래스 예시 : ArrayList, LinkedList, Stack, Vector 등 Set : 순서가 없는 데이터의 집합으로 데이터 중복을 허용하지 않는다. 구현 클래스 예시 : HashSet, TreeSet, LinkedHashSet M..

article thumbnail
자바의 정석 3판 1권 다시보기
Language(JVM) 2022. 2. 9. 17:19

보면서 다시 상기해야 할 내용이나 기억 안 났던 내용을 다시 정리하는 글 Ch 05. array 배열을 복사할 때 for문 보다 System.arraycopy()를 이용하자. native code를 호출해서 더 빠르다. System.arraycopy(srcArray, srcArrayStartIndex, desArray, desArrayStartIndex, CountOfSrcArray) int[] src = {1, 2, 3}; int[] des = new int[5]; // des는 항상 src의 크기와 같거나 커야한다. System.arraycopy(src, 0 , des, 0, src.length); System.out.println(Arrays.toString(src)); // [1, 2, 3] Sy..