전체 글(100)
-
[일문일답][Java] String vs StringBuilder vs StringBuffer
String String 클래스는 불변 객체이다. String 클래스의 문자열을 저장하는 char[]을 보면 final로 선언되어 있고, 해당 배열을 재할당하는 코드는 존재하지 않는다. public final class String implements java.io.Serializable, Comparable, CharSequence { /** The value is used for character storage. **/ private final char value[]; ... } 따라서 한 번 할당한 문자열을 변경하는 것은 불가능하며, 더하기 연산을 하여 문자를 이어 붙일 때는 새로운 객체가 생성되어 재할당된다. String s = "hello"; System.out.println(s.hashCode..
2022.10.30 -
[일문일답][Java] 직렬화와 역직렬화
데이터 직렬화와 역직렬화 데이터 직렬화 메모리를 디스크에 저장하거나, 네트워크 통신에 사용하기 위한 형식으로 변환하는 것이다. 데이터 역직렬화 디스크에 저장한 데이터를 읽거나, 네트워크 통신으로 받은 데이터를 메모리에 쓸 수 있도록 변환하는 것이다. 직렬화는 데이터를 저장 혹은 통신에 사용하기 위한 것은 알겠는데, 왜 데이터를 그냥 사용하면 안 되고 직렬화라는 과정을 거쳐야 하는 것일까? 직렬화가 필요한 이유 개발 언어를 무엇을 선택하든, 사용하는 데이터의 메모리 구조는 크게 2가지로 나뉜다. 값 형식 데이터 int, float, char 등 값 형식 데이터는 스택에 메모리가 쌓이고 직접 접근이 가능하다. 참조 형식 데이터 객체와 같은 참조 형식 변수를 선언하면 힙에 메모리가 할당되고, 스택에서는 이 힙..
2022.10.29 -
[일문일답][Java] atomic type과 CAS
synchronized의 문제점 synchronized는 blocking을 사용하여 멀티 스레드 환경에서 공유 객체를 동기화하는 키워드이다. 그러나 blocking에는 여러 가지 단점이 존재하는데, 그 중에서 손 꼽는 문제는 성능 이슈이다. 특정 스레드가 해당 블럭 전체에 lock을 걸면, 해당 lock에 접근하는 스레드들은 블로킹 상태에 들어가기 때문에 아무 작업도 하지 못한 채 자원을 낭비한다. 또한 blocking 상태의 스레드를 준비 혹은 실행 상태로 변경하기 위해 시스템의 자원을 사용해야 한다. 결국 이 문제는 성능 저하로 이어진다. 이러한 문제점 때문에 non-blocking을 하며 원자성을 보장하기 위한 방법이 atomic 변수이다. 원자성과 Atomic Type atomic 변수는 멀티 스..
2022.10.29 -
[Spring] 애플리케이션 컨텍스트(Application Context)와 스프링의 싱글톤(Singleton)
이번에는 애플리케이션 컨텍스트에 대해 알아보도록 하자. 1. 애플리케이션 컨텍스트(Application Context) [ 애플리케이션 컨텍스트(Application Context)란? ] Spring에서는 빈의 생성과 관계설정 같은 제어를 담당하는 IoC(Inversion of Control) 컨테이너인 빈 팩토리(Bean Factory)가 존재한다. 하지만 실제로는 빈의 생성과 관계설정 외에 추가적인 기능이 필요한데, 이러한 이유로 Spring에서는 빈 팩토리를 상속받아 확장한 애플리케이션 컨텍스트(Application Context)를 주로 사용한다. 애플리케이션 컨텍스트는 별도의 설정 정보를 참고하고 IoC를 적용하여 빈의 생성, 관계설정 등의 제어 작업을 총괄한다. 애플리케이션 컨텍스트에는 직접..
2022.10.15 -
[Spring] Dependency LookUp (DL)
1. 빈을 찾기 위한 다양한 의존성 검색 방법, DL(Dependency LookUp) Spring으로 개발을 하다보면 의존성을 주입(DI, Dependency Injection) 받는 것 뿐만 아니라 의존성을 갖는 빈을 검색(DL, Dependency LookUp)해야 할 때가 있다. 예를 들어 프로토타입 스코프의 빈을 이용해야 하는 경우가 대표적이다. Spring에서는 빈을 검색하기 위한 다양한 방법들을 제공하는데, 크게 5가지가 있다. [ ApplicationContext를 이용한 방법 ] Spring에서는 빈 팩토리를 구현한 DI 컨테이너인 ApplicationContext를 관리하고 있다. 그래서 우리는 ApplicationContext를 통해서 필요로 하는 빈을 다음과 같이 검색할 수 있다. ..
2022.10.13 -
[Spring] @Autowired 빈 탐색 전략과 @Qualifier와 @Primary
1. 빈(Bean) 등록과 조회 규칙 [ 빈(Bean) 등록 ] Spring은 기본적으로 메소드/클래스의 이름을 Bean의 이름으로 사용한다. @Bean public DiscountPolicy fixDiscountPolicy() { return new FixDiscountPolicy(); } @Bean public DiscountPolicy rateDiscountPolicy() { return new RateDiscountPolicy(); } 하지만 개발자가 직접 빈의 이름을 부여할 수도 있다. @Bean("fixDiscountPolicy") public DiscountPolicy fixDiscountPolicy() { return new FixDiscountPolicy(); } @Bean("rateDi..
2022.10.13