전체 글

JAVA 🎻

[Java] StackTrace란

StackTrace 스택 추적(스택 트레이스)란 프로그램이 시작된 시점부터 현재 위치까지의 메서드 호출 목록으로 어디서 예외가 발생했는지 추적하여 알려주는 역할 예외의 유형과 메시지, 예외가 발생했을 때 진행 중이던 모든 메서드 호출 목록 첫 번째 프레임은 JVM이 스택 추적을 생성하는 실행 지점 가장 먼저 실행된 메서드가 스택 추적의 마지막 스택 프레임이 되고 마지막에 실행된 메서드가 스택 추적의 첫 번째 스택 프레임 어떻게 생성? JVM은 예외가 발생하면 자동으로 Stack Trace를 생성 Stack Trace에서 각 요소는 메서드 호출부를 나타내 예외가 발생한 위치를 추적 Stack Trace → 예외 → call stack에 있는 메소드 리스트를 저장 Throwable 클래스에서는 콘솔에서 St..

카카오테크캠퍼스/3단계

클린 코드와 TDD 특강 정리

우테코 박재성(Jason)님의 특강이였다. 개인적으로 라이브 코딩을 통해 강의해주신 부분이, 어떤 플로우로 테스트 코드를 작성하면 좋을지를 파악하는데 너무 좋아서 만족했던 강의였다. 최고! 테스트 남들에게 실행 시키기 전에 수동 테스트 해봤던 경험이 있을 것 내가 원하는 방식으로 작동이 되는지 확인하기 위해 테스트의 진화 언어별, 국가별, 장치별 테스트를 모두 수동으로 할 수 있을까? QA 조직의 등장테스트 자동화된 테스트 자동화된 테스트의 필요성은 사람에 따라 다를 수 있음 못 느낄 수도 버그를 잡는 것은 테스트 해야 하는 많은 이유 중 하나일 뿐 소프트웨어의 변화를 지원하는 역할이란 것을 이해하자 네카라 같은 기업들은 지속적으로 코드를 개선한다 자동화된 테스트는 실수를 발견해주고 자신있게 코드를 작성..

카카오테크캠퍼스/3단계

설계 및 API 특강

설계 및 API 특강 해당 특강은 DDD Start! 등의 저서를 작성한 최범균 강사님께서 강의해주셨다 설계란 그렇다면 설계 시 고려해야할 것은? 구조, 데이터 모델, 알고리즘, 인터페이스 소프트웨어에서 실제로 사용할 모델, 물리적인 저장소에서 사용할 모델 -> 분리해서 사용할수도 설계시 고려할 사항으로는 데이터의 규모와 요구하는 응답 시간이 있다. 인터페이스 시스템 간 데이터를 주고 받는 연동방식, 규약 정의 프론트 백엔드간(Http), 백엔드간 API(TCP, GRP 등)이 잇다. 요구사항 설계는 요구사항이 무엇이냐에 따라 바뀐다. 즉, 요구사항은 설계의 출발점이라고 할 수 있다. 구성 요소 크기 3개의 그림의 차이(ListComp) 구성요소를 정말 작게 할수도 있고 아닐수도 다양함 그렇다면 기준으로..

CS 👩🏻‍💻/데이터베이스

인덱스와 클러스터 인덱스

인덱스란 정렬된 자료구조로 탐색 범위를 최적화 인덱스도 테이블이다 쿼리가 들어오면 인덱스를 조회한 후 찾은 곳으로 이동 인덱스의 자료구조 HashMap 단검 검색 속도 O(N) 범위 탐색은 O(N) 전방 일치 탐색이 불가능함 -> key를 하나하나 꺼내서 확인해야 하기에 List 정렬되지 않은 리스트의 탐색 O(N) 정렬된 리스트의 탐색 O(logN) 정렬되지 않은 리스트의 정렬 시간 복잡도는 O(N) ~ O(N*logN) 삽입/삭제 비용이 매우 높음 Tree 트리 높이에 따라 시간 복잡도가 결정 트리의 높이 최소화하는 것이 중요함 한쪽으로 노드가 치우치지 않도록 균형을 잡아주는 트리 사용 B+ Tree 삽입 삭제 시 항상 균형 하나의 노드가 여러 개의 자식 노드를 가질 수 있음 리프노드에만 데이터가 존..

독서📚

[아이템 44] 표준 함수형 인터페이스를 사용하라

표준 함수형 인터페이스를 사용하라 자바가 람다를 지원하면서 API를 작성하는 모범 사례도 변화 템플릿 메서드 패턴 → 함수 객체를 받는 정적 팩터리나 생성자를 제공 protected 메서드인 remvoeEldestEntry를 재정의 하면 캐시로 사용 가능 맵에 새로운 키를 추가하는 put 메서드는 이 메서드를 호출하여 true가 반환되면 가장 오래된 원소를 제거 재정의 removeEldestEntry를 아래와 같이 재정의하면 맵에 새로운 키가 더해질 때마다 가장 오래된 원소를 하나씩 제거 즉 가장 최근 원소 100개를 유지 protected boolean removeEldestEntry (Map.Entry eldest) { return size() > 100; } removeEldestEntry는 siz..

독서📚

[아이템 43] 람다보다는 메서드 참조를 사용하라

람다가 익명 클래스보다 나은 가장 큰 점은 간결함! 메서드 참조 자바에는 함수 객체를 심지어 람다보다도 더 간결하게 만드는 방법 merge() 해당 메서드는 키, 값, 함수를 인수로 받음 주어진 키가 맵 안에 아직 없다면 {키, 쌍} 저장 반대로 키가 이미 있다면 함수를 현재 값과 주어진 값에 적용한 다음, 그 결과로 현재 값을 덮어씀 즉, {키, 함수의 결과} 쌍을 저장 map.merge(key, 1, (count, incr) -> count + incr); merge()에 메서드 참조 적용하기 map.merge(key, 1, Integer::sum); 람다와 메서드 참조 람다로 할 수 없는 일이라면 메서드 참조로도 할 수 없지만 메서드 참조를 사용하는 편이 보통은 더 짧고 간결 람다로 구현했을 때 너..

독서📚

[아이템 42] 익명 클래스보다는 람다를 사용하라

함수 객체 예전 자바에서는 함수 타입을 표현할 때 추상 메서드를 하나만 담은 인터페이스를 사용 이런 인터페이스의 인스턴스를 함수 객체라고 하여, 특정 함수나 동작을 나타내는데 사용 함수 객체를 만드는 주요 수단은 익명 클래스 Collections.sort(words, new Comparator() { public int compare(String s1, String s2) { return Integer.compare(s1.length(), s2.length()); } } 익명 클래스의 한계 위 코드에서 Comparator 인터페이스가 정렬을 담당하는 추상 전략을 뜻하며문자열을 정렬하는 구체적인 전략을 익명 클래스로 구현 익명 클래스 방식은 코드가 너무 길다 따라서 자바는 함수형 프로그래밍에 적합하지 않았..

독서📚

새로운 인프라 환경이 온다

컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커 1장 1.1 컨테이너 인프라 환경이란 컨테이너 인프라 환경은 컨테이너를 중심으로 구성된 인프라 환경 컨테이너란? 하나의 운영 체제 커널에서 다른 프로세스에 영향을 받지 않고 독립적으로 실행되는 프로세스 상태를 의미 이렇게 구현된 컨테이너는 가상화 상태에서 동작하는 프로세스보다 가볍고 빠르게 동작함 컨테이너 인프라 환경의 장점을 이해하려면 서비스의 설계 부분을 살펴보자! 1.1.1 모놀리식 아키텍처 모놀리식 아키텍처는 하나의 큰 목적이 있는 서비스 또는 애플리케이션에 여러 기능이 통합되어 있는 구조를 의미 장점 소프트웨어가 하나의 결합된 코드로 구성되기 때문에 초기 단계에서 설계하기 용이하며 개발이 좀 더 단순하고 코드 관리가 간편 단점 서비스를 운영하는 ..

JAVA 🎻

내가 보려고 정리한 Map의 메서드

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 =..

JAVA 🎻

Function Interface과 Lambda Expression

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..

minl741
홀리몰리 개발로그