본문 바로가기

전체 글

2023.01.04 인프런 김영한님 Spring 강의 빈의 생명주기에 따라 등록, 소멸 될 때 특정 메서드를 실행할 수 있다. @PostConsturct, @PreDestroy 같은 자바 코드를 사용하여 스프링 의존성을 제거할 수 있다. 빈은 스코프를 가지고, 대표적인 3가지 스코프가 있다. 싱글톤, 프로토타입, request 자기 전이라 디테일하게 기록하기가 힘들다 ㅠㅠ 이런 회고가 좋지만 Deep dive한 내용만 기록하기로 했던 이유가 다시 떠오른다... ㅋㅋㅋ 피드백 당장 준비할 것을 파악하자 -> 공부 우선순위가 정해진다 공부 시간, 휴식 시간보다 집중도와 흐름을 신경쓰자 더보기
2023.01.03 지나간 것은 기록하지 않기..! 눈덩이 된다~ 인프런 김영한님 Spring 강의 의존관계 주입은 다양한 방식이 있다. 생성자 주입을 사용하자. 객체의 불변성을 보장할 수 있다. `private val` 누락된 경우 컴파일 오류, final 사용 등으로 주입이 안된 경우 알 수 있다. setter 주입도 사용할 때가 있다. 필드 주입은 Test 작성 시 사용할 수 있다. @Autowired(required = ), @Nullable, Optional (Kotlin은 타입에 nullable을 지원한다) 조회 빈이 2개 이상이라면 다음으로 해결할 수 있고, 어노테이션을 만들어서 사용하면 깔끔하다. @Qulifier @Primary @Autowired 필드명 여러 개 빈을 모두 주입받고 싶다면 Map, List.. 더보기
2022.12.29 인프런 김영한님 Spring 강의 BeanDefinintion을 통해 Bean 정보가 저장되고, 확인할 수 있다. Bean이 Singleton이어야 불필요한 객체 생성을 막고 한개의 동일한 객체를 공유한다. Singleton은 단점도 많다. 그러나 스프링 컨테이너가 싱글톤 컨테이너 역할을 해주면서 모든 단점이 극복된다. @Configuration 어노테이션이 바이트 코드 조작을 하여 하위 클래스가 생성되고, Singleton 관리가 가능하게 된다. 프로그래머스 알고리즘 1개 풀기 빨리 풀고 싶긴 하겠지만, Think twice Write Once 하자.... 피드백 이전 계획을 확인하지 않았다. 확인하자 꼭! 쉬는 시간 정해놓기 꼭! 딥 다이브 소재가 있다면 기록하고, 블로깅해보자 더보기
2022.12.26 복기 시작 블로그에 하루 돌아보기를 쓰기로 한 첫 글. 개인 노트에만 적어오다가 블로그에 꾸준히 작성하기로 했다. 공개하여 보여주기 위함은 아니나, 꾸준함을 기록하기 위해 시작했다. 인프런 김영한님 Spring 강의 Spring DI 컨테이너를 직접 사용하는 방법을 학습했다. ApplicationContext를 이용해 등록한 bean을 조회할 수 있고, bean의 이름, 타입에 따라 어떻게 동작하는지 확인했다. (ex 동일한 type이 2개이면 NoUnique~~ 예외 발생 등) DI 프레임워크가 어떤 일을 해주고, 어떻게 동작하는지 이해했다. 늘 WHY를 생각하자. 의존관계 주입을 해주는 것이 왜 필요했는지, Spring을 사용하지 않고 구현하려면 어떤 불편함이 있는지! Junit도 실행 부분(내가 만든 로직?).. 더보기
[WHY?] ConcurrentHashMap은 어떻게 동시성을 보장할까 HashTable 동시성을 보장하는 Map 자료구조 중 하나이다. 그러나 성능이 좋지 않은 오래된 녀석이라 잘 사용하지 않는다. public synchronized int size() { return count; } public synchronized V put(K key, V value) { ... } Java API 문서를 보면 알겠지만, synchronized 범벅을 통해 동시성을 보장한다. 동시성을 보장해주는 synchronized는 편리한 키워드지만 컬렉션의 get, put 등 모든 메소드에 사용하게 되면, 당연히 성능이 저하된다. ConcurrentHashmap 결론적으로 ConcurrentHashmap은 좋은 성능과 함께 동시성을 보장한다. 어떻게 그럴 수 있을까? public V get(O.. 더보기
[WHY?] Static 무엇일까? Static이 정확히 뭘까? Static 변수 public Static{ public String notStatic; public static String staticVariable = "sv"; public static void main(String[] args) { } public void someMethod() { } } 위와 같은 Static 클래스가 존재할 때, notStatic은 인스턴스 변수, StaticVariable은 클래스 변수이다. 인스턴스 변수는, 객체의 생성과 함께 시작되고 저장된다. - new 연산자로 생성되고 Heap 영역에 저장된다. 클래스 변수는 클래스의 생성과 함께 저장된다. - 클래스에 대한 정보와 클래스 변수는 메소드 영역에 저장된다. 즉, 생명 주기도 다르고 저장되는.. 더보기
[Effective Java] Item 1. 생성자 대신 정적 팩터리 메서드를 고려하라 보호되어 있는 글입니다. 더보기
Jetpack Compose 정리1. 기본 구성 Compose는 선언형 UI로, 기존의 xml을 사용하던 방식과는 다르다. Activity에 @Composable 어노테이션을 붙여 사용하고, 여러 Compose의 코드들로 UI를 구성할 수 있다. Compose를 사용했을 때의 장점은 코드 감소, 직관적, 빠른 개발 속도, 강력한 성능이라 할 수 있는데, 왜 이런 장점을 가지는지 공부하며 알아보자! @Composable fun MessageCard(msg: Message) { // Add padding around our message Row(modifier = Modifier.padding(all = 8.dp)) { Image( painter = painterResource(R.drawable.profile_picture), contentD.. 더보기