프로그램 개발 시, 우리는 우리의 예상대로 동작하지 않는 수많은 상황을 마주치게 됩니다.그중에서도 예외 발생 시, StackTrace를 통해 디버깅을 하곤 하는데요. StackTrace를 더 잘보기 위해 StackTrace에 대해 알아봅시다!Java 예외는 어떻게 터질까?JVM은 예외가 발생했을 경우, 예외를 처리할 수 있는 try-catch 블록을 찾습니다.try-catch 블록을 사용하여 코드 내에서 명시적으로 처리되지 않을 경우, 예외는 전파되는데요. 쓰레드 내에서 처리시킬 try-catch 블록가 없어 끝까지 처리되지 않은 예외는 결국 스레드의 실행을 중단시키는 예외를 말합니다.해당 처리되지 않은 예외를 처리하기 위해 JVM은 아래의 Thread 클래스의 dispatchUncaughtExcep..
작년 8월 스터디에서 제가 작성했던 이슈 내용을 가지고 왔습니다. https://github.com/JNU-econovation/Javs/issues/67 개발이나 알고리즘을 풀 때 collection을 상속한 List와 Set, Map는 많이 사용하지만 정작 collection에 대한 기본 지식은 부족한 것 같아 선정하게 되었습니다. 추가로 collections와의 차이점은 무엇일지에 대해 알고자 작성하게 되었습니다. Collection Collection Framework에서 최상위 인터페이스 Collection Framework란 뭘까 자료 구조를 바탕으로 객체, 데이터들을 효율적으로 관리할 수 있는 자료 구조들이 있는 라이브러리 컬렉션이라는 단어의 의미 -> 다수의 데이터(데이터 그룹) 그래서 제..
StackTrace 스택 추적(스택 트레이스)란 프로그램이 시작된 시점부터 현재 위치까지의 메서드 호출 목록으로 어디서 예외가 발생했는지 추적하여 알려주는 역할 예외의 유형과 메시지, 예외가 발생했을 때 진행 중이던 모든 메서드 호출 목록 첫 번째 프레임은 JVM이 스택 추적을 생성하는 실행 지점 가장 먼저 실행된 메서드가 스택 추적의 마지막 스택 프레임이 되고 마지막에 실행된 메서드가 스택 추적의 첫 번째 스택 프레임 어떻게 생성? JVM은 예외가 발생하면 자동으로 Stack Trace를 생성 Stack Trace에서 각 요소는 메서드 호출부를 나타내 예외가 발생한 위치를 추적 Stack Trace → 예외 → call stack에 있는 메소드 리스트를 저장 Throwable 클래스에서는 콘솔에서 St..
Map의 메서드의 사용법에 대해 자주 헷갈리고 있는 나를 발견하면서 앞으로도 헷갈릴 때 두고두고 보기 위해 작성해봅니다! getOrDefault 구현 코드 default V getOrDefault(Object key, V defaultValue) { V v; return (((v = get(key)) != null) || containsKey(key)) ? v : defaultValue; } 메서드 이름에서 알 수 있듯이 해당하는 key의 value를 가져오거나, 만약 map에 해당하는 key가 없다면 defaultValue를 리턴하는 메서드이다. 사용 예시 아래는 모든 참가자들을 map에 저장하고 모든 완주자에 대해 map에서 제거하여 완주하지 못한 참가자들을 구하는 코드이다. HashMap map =..
Function Interface @FunctionalInterface public interface Function { R apply(T t); } 위에서 Funtion 인터페이스가 의미하는 것 T라는 Input Type을 받아 R이라는 Output Type을 반환하는 것 함수를 객체 형태로 만들기 public class Adder implements Function { @Override public Integer apply(Integer x) { return x + 10; } } Function 인터페이스를 구현하기 apply 메서드를 오버라이딩하여 원하는 함수를 구현하기 해당 함수를 사용 시에는 아래와 같이 사용할 수 있다. import chapter3.util.Adder; import java.u..
모던 자바 인 액션을 보고 리액티브 스트림스의 백프레셔는 무엇이고 왜 좋은지 라는 의문이 생겨 정리하였습니다. 참고한 글 Armeria로 Reactive Streams와 놀자! - 1 [리액티브 프로그래밍] Publisher, Subscriber 그리고 Subscription - 2 관찰자(Observer) 패턴이란? 리액티브 프로그래밍의 기초 관찰자 패턴에는 이벤트를 발생시키는 역할(주체)와 이벤트를 수신하는 역할(관찰자)가 있다. 주체(subject)는 관찰자(observer)에게 상태변경을 알려준다. 관찰자 패턴의 문제점과 결합 옵저버 패턴에서는 발행자(publisher)가 구독자(subscriber)에게 밀어 넣는 방식으로 데이터가 전달 발행자는 구독자의 상태를 고려하지 않고 데이터를 전달하는 ..
JDBC란? Java Database Connectivity의 약자로, JDBC API는 Java 프로그래밍 언어에서 범용 데이터 액세스를 제공한다. JDBC API를 사용하면 관계형 데이터베이스부터 스프레드시트 및 플랫 파일에 이르기까지 거의 모든 데이터 소스에 액세스가 가능하고 JDBC 기술은 도구와 대체 인터페이스를 구축할 수 있는 공통 기반을 제공한다. JDBC API JDBC API는 java.sql, javax.sql 두 패키지로 구성되어 있으며 특정 데이터베이스 관리 시스템에서 JDBC API를 사용하려면 JDBC 기술과 데이터베이스 사이를 중개하는 JDBC 기술 기반 드라이버가 필요하다. (JDBC 드라이버는 순수하게 Java 프로그래밍 언어로 작성되거나 Java 프로그래밍 언어와 JNI(..
모던 자바 인 액션 5장을 보고 정리한 내용입니다. 1. 필터링, 스트림 슬라이싱 고유 요소 필터링 distinct 고유 요소로 이루어진 스트림을 반환하는 메서드 즉, 중복한 값들은 반환하지 X 고유 여부는 스트림에서 만든 객체의 hashCode, equals로 결정 List numbers = Arrays.asList(1, 2, 1, 3, 3, 2, 4); numbers.stream() .filter(i -> i % 2 ==0) .distinct() .forEach(System.out::println); // 출력 // 2 // 4 스트림 슬라이싱 takeWhile 무한 스트림을 포함한 모든 스트림에 프레디케이트를 적용해 스트림을 슬라이스 가능 takeWhile과 filter의 차이? filter 메서드..
방법 1. Jsoup의존성 추가 gradle에서는 아래와 같은 의존성을 추가해주면 된다. // jsoup HTML parser library @ implementation 'org.jsoup:jsoup:1.15.3' 2. 크롤링할 페이지의 url 등록 Document docs = Jsoup.connect("").get(); 3. 크롤링할 css 요소의 쿼리문 복사 제가 크롤링할 요소는 제목, 카테고리, 본문 url이므로 사진의 개발자 툴에서 해당 요소들이 있는 css 쿼리를 복사한다 각 요소가 속한 태그의 class = “샬라샬라” ← 이 부분을 작성하면 됨! //공지사항 제목 Elements titles = docs.select("a.tbl_title"); //공지사항 카테고리 Elements cate..
스터디를 진행 중인 모던 자바 인 액션을 보고 정리한 내용입니다. 디폴트 메서드란? 자바 8부터 지원하는 기능으로 인터페이스를 쉽게 변경할 수 있음 디폴트 메서드는 특정 프로그램을 구현하는 데 도움을 주는 기능이 아니라 미래에 프로그램이 쉽게 변화할 수 있는 환경을 제공하는 기능 위의 예제는 자바 8이 나오기 전에는 컴파일이 불가능한 코드 → 자바 8 이전에는 List (List가 구현하는 Collection인터페이스 포함)가 stream이나 parallelStream 메서드를 지원하지 않았음 위를 해결하려면? 1. 직접 인터페이스를 만들기 (자바 8 설계자들이 했던 것처럼) Collection 인터페이스에 stream 메서드를 추가하고 ArrayList 클래스에서 구현 🤔 이 방법의 문제 이미 컬렉션 ..