우주먼지
Try-With-Resource
Languages/Java 2023. 3. 25. 07:19

💡 Try-With-Resource JDK 1.7 부터 try-catch의 변형인 try-with-resources가 추가되었다. 주로 입출력에 필요한 클래스들 중 사용 후 닫아줘야 하는것들을 자동으로 닫아준다. 그래야 사용했던 자원(resources)가 반환되기 때문이다. 아래 예시는 DataInputStream을 이용해 파일로부터 데이터를 읽는 코드이다. 데이터를 읽는 도중 예외가 발생하더라도 Stream이 닫히도록 finnaly 안에 close()를 넣었다. 별 문제가 없어 보이는 코드지만 진짜 문제는, close()가 예외를 발생시킬 수 있다는데 있다. try { fis = new FileInputStream("score.dat"); dis = new DataInputStream(fis); } c..

Multi Catch Block
Languages/Java 2023. 3. 25. 07:18

💡 멀티 Catch 블럭 JDK 1.7부터 여러개의 catch 블럭을 '|'를 이용해 하나의 catch 블럭으로 합칠 수 있게 되었다. 중복 코드를 줄일 수 있으며, '|' 기호로 연결할 수 있는 예외 클래스의 개수는 제한이 없다. try { ... } catch (ExceptionA | ExceptionB e) { e.printStackTrace(); } // 상위, 하위 클래스가 | 기호와 같이 있다면 에러가 발생한다. try { ... } cathc (ParentException | ChildException) { // 에러 ... } 멀티 catch 블럭은 하나의 블럭으로 여러 예외를 처리하는 것이기 때문에, 발생한 예외를 처리할 때 실제로 어떤 예외가 발생한 건지 알 수 없다. 그래서 참조변수 ..

Stream 생성
Languages/Java 2023. 3. 17. 18:01

💡 스트림 생성 스트림의 소스가 될 수 있는 대상은 배열, 컬렉션, 임의의 수 등 다양하다. 컬렉션 컬렉션의 최상위 인터페이스인 Collection에 stream()이 정의되어 있다. 그래서 Collection의 하위 인터페이스인 List와 Set을 구현한 클래스들은 모두 이 메서드로 생성 가능하다. Stream Collection.stream() List로부터 스트림을 생성하는 코드의 예시 List list = Arrays.asList(1,2,3,4,5); // 가변인자 Stream intStream = list.stream(); // list를 소스로 컬렉션 생성 forEach()는 지정된 작업을 스트림의 모든 요소에 대해 수행한다. 주의할 점은 forEach()가 모든 요소를 소모해 작업 수행 후 ..

Stream
Languages/Java 2023. 3. 1. 17:10

💡 Stream 많은 수의 데이터를 다룰 때 컬렉션이나 배열에 데이터를 담고 원하는 결고를 얻기 위해 for문이나 iterator를 사용해서 코드를 작성해왔다. 그러나 이런 방식으로 작성된 코드는 너무 길고 가독성과 재사용성이 떨어진다. 또 다른 문제는 데이터 소스마다 다른 방식으로 다뤄야 한다는 단점이 있다. 예를 들면 List를 정렬할 때는 Collections.sort()를 사용하고, 배열을 정렬할 때는 Arrays.sort()를 사용해야 한다. 이러한 문제를 해결하기 위해 만든것이 Stream이다. 스트림은 데이터 소스를 추상화하고 데이터를 다루는데 자주 사용되는 메서드들을 정의 해놓았다. 스트림의 특징 데이터 소스(원본)을 변경하지 않는다. Iterator처럼 일회용이다. 작업을 내부 반복으로 ..

Single & Multi Thread
Languages/Java 2023. 3. 1. 15:03

💡 Single & Multi Thread 싱글코어 스레드 수행시간의 쉬운 측정을 위해 new String 사용 (작업 수행속도 낮춤) public class CountThreadTimeMillis { public static void main(String[] args) { long startTime = System.currentTimeMillis(); for (int i=0; i

article thumbnail
Thread
Languages/Java 2023. 3. 1. 13:59

💡 Thread 데이터와 어플리케이션이 확보한 자원을 활용하여 소스코드 실행 즉, 하나의 코드 실행 흐름 Thread 프로세스에서 실행 제어만 분리한 것 프로세스로부터 자원을 할당받고 그 자원을 이용하는 실행의 단위 프로세스의 Stack만 할당받고 코드 & 데이터 & 힙영역은 공유하기 떄문에 좀 더 효율적인 통신 가능 캐시 메모리를 비우지 않아도 되서 더 빠름 자원 공유로 인한 문제가 발생할 수 있으니 이를 염두에 둔 프로그래밍을 해야함 한 프로세스에 여러개의 스레드가 생성될 수 있음 즉, 캐시 메모리나 PCB에 저장해야하는 내용이 적고 비워야 하는 내용도 적기 때문에 상대적으로 더 빠른 컨텍스트 스위칭 💡 구현과 실행 Thread 클래스를 상속하는 방법 (다른 클래스 상속 불가, 권장 X) Thread..

J2EE
Languages/Java 2023. 2. 20. 10:27

💡 J2EE 자바 기술로 기업환경의 어플리케이션을 만드는데 필요한 스펙들을 모아둔 스펙의 집합이다. IBM, BEA, Oracle, HP, Lona 등 여러 벤더들도 그 스펙을 구현할 수 있으며, J2EE 호환성을 검증하는 기구의 검증을 통과하기만 하면 J2EE 호환 제품으로 시장에 출시가 가능하다. 기본 특징 J2EE의 가장 큰 특징은 Java로 구현된 기술이기 때문에 Java가 갖는 기본적인 특징인 "플랫폼 독립성"을 갖추고 있다. Java 언어는 JVM을 통해 각 OS에 맞는 바이트코드로 변환되어 실행되기 때문에, JVM이 탑재된 플랫폼이면 어떤 플랫폼이라도 동일한 자바 소스 코드를 실행시킬 수 있다. 구성 요소 J2EE는 매우 방대한 범위를 다루는 스펙 집합이므로 대표적인 것들만 나열해보겠다. S..

검색 태그