본문 바로가기

전체 글

Effective java 정복기 4장 아이템_15 클래스와 멤버의 접근 권한을 최소화하라 정보 은닉- 다른 객체에게 자신의 정보를 숨기고 자신의 연산만을 통해 접근을 허용하는 것- 여러 컴포넌트를 병렬로 개발 가능 (시스템 개발 속도 UP)- 각 컴포넌트를 더 빨리 파악할 수 있고 교체 부담도 적음 (시스템 관리 비용 DOWN) - 성능 최적화 도움- 소프트웨어 재사용성 UP  // AS-ISpublic class A{ private int a;}public class B{ // B가 A에서만 쓰이는 클래스라면? private int b;} // TO-DOpublic class A{ private int a; private static class B{ private int b; }}멤버 접근성의.. 더보기
Effective java 정복기 3장 아이템_10 equals는 일반 규악을 지켜 재정의해라  equals는 언제 재정의 할까? equals는 논리적인 동치성을 확인하고 싶을 때 재정의 한다.Enum: 값 클래스라고 해도 값이 같은 인스턴스가 둘 이상 만들어지지 않음을 보장할때 hashCode: 객체의 주소값을 변환하여 생성한 객체의 고유한 정수값 equals 메서드:목적: 두 객체의 "내용"이 같은지를 비교합니다.기본 동작:기본적으로는 Object 클래스의 equals 메서드를 상속받아, 두 객체의 참조값(주소)을 비교합니다.하지만 필요에 따라 **객체의 내용(필드 값)**을 비교하도록 equals를 재정의(override)할 수 있습니다.사용 예:문자열 비교: String 클래스는 equals를 재정의하여 문자열의 내용을 비교하도록 구현.. 더보기
Effective java 정복기 2장 목표- 취뽀 기념 실무코드컨벤션을 잘 지키기위해 , 더 효율적인 코드를 작성하기위해 Effective java 정복기목차· 1장· 2장· 3장· 4장· 5장· 6장· 7장· 8장· 9장· 10장· 11장· 12장   1장 아이템_01 생성자 대신 정적 팩터리 메소드를 고려하라장점 1 : 생성자 자체는 생성되는 객체의 특성을 직관적으로 설명하지 않는다. 하지만 정적팩토리메소드를 사용하게 되면이름을 가질 수 있다.public static Position createStartPosition(){ return new Position(START_POSITION_VALUE);}Position position=Position.createStartPosition(); 장점 2 : Static을 사용하게 되면 클래스레벨.. 더보기
2024년 연말회고 그리고 Spring boot 오픈소스기여 ㅇ목차· 첫 인턴의 시작· 긴 대학 생활의 끝· Spring boot 오픈소스 기여· 2025년 앞둔 나  첫 인턴의 시작 2024년 4월, 첫 인턴의 문을 열었다. 작년 한 해 동안 멋쟁이사자처럼, SW마에스트로 14기 연수생, 그리고 여러 공모전을 통해 다양한 사람들을 만나고 많은 경험을 쌓을 수 있었다. 그 모든 순간이 정말 소중했다. 특히 개발자뿐만 아니라 다양한 분야의 사람들과 소통하고 대화하는 방법을 배우면서, 나 자신을 한층 더 성장시킬 수 있었다. 이러한 경험들이 바탕이 되어, "실무에서는 어떤 방식으로 일할까?", "어떤 프로세스로 일들이 진행될까?"라는 궁금증이 생겼고, 그 답을 찾기 위해 첫 인턴을 시작하게 되었다. 인턴을 시작한 회사는 SI 외주를 주로 담당하는 곳이었다. 본격적인 .. 더보기
ParallelStream은 무엇일까? JAVA8에는 람다식을 효과적으로 사용할 수 있도록 기존 API에 람다를 대폭 적용하였고,그 대표적인 인터페이스는 Stream입니다. 스트림인터페이스는 컬렉션을 파이프 식으로 처리하도록하면서 고차함수로 구조를 추상화시킵니다. 스트림을 사용하게되면, 여러줄의 코드를 간편하게 처리할 수 있고, 가독성이 쉽습니다.또한 Parallel Stream이라는 것을 통해 병렬연산을 쉽고 간단하게 할 수 있다고합니다. ForkJoinFrameWork 란? ForkJoinFrameWork 는 큰 작업을 작은 작업들로 쪼개어 작업을 병렬로 처리하고 처리한 작업들을 다시 큰 작업으로 합치는 방식으로 동작합니다.(마치 분할정복 알고리즘과 같이 동작합니다.)Fork: 작업들을 작은 작업들로 분할함.Join: 분할된 작업들을 큰 .. 더보기
Redis가 싱글스레드임에도 높은 성능을 보장하는이유 분산된 서버에서 데이터를 저장하거나, TTL을 설정하거나, 동시성을 제어하기위해 등등 여러용도로 Redis는 많이사용되고있다. 프로젝트에서도 Redis를 사용하면서 싱글스레드기반으로 동작되기 때문에 동시성문제를 제어하는데 있어서 문제는 없지만싱글스레드기반이기 때문에 성능에 문제가 있지 않을까? 하는 의문은 한번 쯤은 해봤던 것 같다. 이 의문점을 풀기위해 글을 작성합니다.  왜 Redis는 높은 성능을 보장하는가 ? 1. 메모리 기반 데이터 저장- Redis는 모든 데이터를 메인 메모리에 저장하고 주기적으로 스냅샷을 디스크에 저장한다. 2. 싱글 스레드 및 이벤트 루트 시스템Redis는 Node.js와 같이 이벤트루프와 I/O Multiplexing을 통해 싱글 스레드 모델임에도 높은 동시성을 보장한다... 더보기
스프링 첫요청이 처리되는데 오래 걸리는 이유 [ 디스패처 서블릿과 서블릿의 생명 주기 ] 스프링에는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임하는 디스패처 서블릿이 존재한다. 첫요청이 오래걸리는 이유는 서블릿의 생명주기를 봐야한다.  - 초기화단계 : 요청이 들어오면 서블릿이 웹 컨테이너에 등록되어 있는지 확인하고, 없으면 초기화를 진행함- 요청처리: 요청이 들어오면 각각의 HTTP메소드에 맞게 요청 처리- 소멸: 웹 컨테이너가 서블릿에 종료 요청을 하여 종료 시에 처리해야하는 작업들 처리 init() 메소드는 첫 요청이 왔을 때 한번만 실행되기 때문에 서블릿의 쓰레드에서 공통적으로 필요로 하는 작업이진행이 되며, 첫요청 시 많은 시간을 필요로한다. [ 디스패처 서블릿과 서블릿의 생명 주기 ]- Multipart 파일 업로드를 위한 Mut.. 더보기
Map 불변성과 순서를 보장하고싶을 때 어떻게 해야할까 이 이야기는 Java에서 Map과 Set 같은 컬렉션의 순서 보장과 불변성(immutable) 유지에 관한 것입니다. 코드를 작성할 때, 특정 순서를 유지하고 불변성을 지켜야 하는 경우가 많습니다. 이때 Java의 Map.copyOf와 Collections.unmodifiableMap 등의 메서드가 어떻게 작동하는지를 잘 이해해야 문제가 생기지 않죠. 핵심 부분을 간단히 정리해볼게요.Map과 순서 보장 문제일반적으로 Java에서 HashMap과 Set은 넣은 순서를 보장하지 않아요. 예를 들어, 1, 2, 3 순서로 넣어도 3, 1, 2 순서로 출력될 수도 있죠. 순서가 중요한 경우 LinkedHashMap이나 LinkedHashSet을 사용하면 됩니다. 이들은 넣은 순서를 그대로 유지해주죠.Map.co.. 더보기