본문 바로가기

Computer Science61

싱글톤 패턴 싱글톤 패턴이 사용되는 이유 웹 애플리케이션은 수많은 클라이언트에서 서비스를 요청받게 되는데, 만약 서버에서 클라이언트의 요청을 받을때마다 클래스 인스턴스를 생성하게 되면 JVM 메모리의 사용량이 증가하게 되고 서버는 부하를 감당할 수 없게 될 것이다. @Configuration public class AppConfig { @Bean public MemberRepository getMemberRepository() { return new MemoryMemberRepository(); } @Bean public DiscountPolicy getDiscountPolicy() { return new RateDiscountPolicy(); } @Bean public MemberService memberServi.. 2023. 4. 23.
try-with-resources Resource 자원은 시스템을 운영하는 데 있어서 메모리나 입출력 장치 등 하드웨어, 소프트웨어 형태로 존재하는 구성요소를 의미한다. 그러나 보통 resource란 외부의 데이터(DB, Network, File)를 일컫는 말로 한정되어 쓰인다. 이런 resource들은 자바 내부에 위치한 요소들이 아니기 때문에, 이러한 프로세스 외부에 있는 데이터를 자바 코드에서 접근하려고 할 때 문제(예외)가 발생할 수 있는 여지가 존재한다. 특히나 이런 입출력에 관련된 resource들에 접근해서 사용하고 나면 닫는 것이 굉장히 중요하다. 예를들어 파일에 접근해 파일을 열고 내용을 쓰는 중에 다른곳에서 같은 resource에 접근해 사용하다 보면 데이터가 꼬일 수 있기 때문이다. GC(Garbage Collecti.. 2023. 4. 17.
직렬화와 역직렬화 정의 직렬화 말그대로 객체를 직렬화하여 전송 가능한 형태로 만드는 것을 의미한다. 객체들의 데이터를 연속적인 데이터로 변형하여 Stream을 통해 데이터를 읽도록 해준다. 이것은 주로 객체들을 통째로 파일로 저장하거나 전송하고 싶을 때 주로 사용된다. 역직렬화 직렬화된 파일 등을 역으로 직렬화하여 다시 객체의 형태로 만드는 것을 의미한다. 저장된 파일을 읽거나 전송된 스트림 데이터를 읽어 원래 객체의 형태로 복원한다. 직렬화는 다음과 같은 특징을 가진다. 프로그램이 종료되어도 객체의 데이터는 파일로 변환하여 저장되어 있기 때문에 언제든지 불러서 다시 객체로 변환할 수 있으며 외부로 보내서 데이터를 공유할 수 있음 Java의 기본 라이브러리를 사용하지 않더라고 여러 형태(CSV, JSON, 일반 파일 등).. 2023. 4. 17.
자바에서의 null 처리 null이란 널(null)은 어떠한 값으로도 초기화 되지 않은 것을 말한다. 이렇게 초기화된 데이터는 내가 사용할 예정이다 정도로 컴파일러는 생각합니다. 그래서 참조형이지만 힙메모리상에 데이터를 만들어 내지 않는다. null이 문제가 되는 상황 - NullPointerException (NPE) NullPointerException은 실제 값이 아닌 null 값을 가지고 있는 객체/변수를 호출할 때 발생하는 예외다. 그래서 NullPointerException이 발생하는 경우는 다음과 같다. null 객체의 instance 함수(static이 아닌 method)를 호출하는 경우 null 객체의 instance 변수에 접근하는 경우 null 배열 객체의 length를 구하려는 경우 null 배열 객체의 값.. 2023. 4. 17.
Java 8, 11, 17에서의 변화 LTS란 LTS는 Long Term Support의 줄임말로, 출시 후 8년 동안 보안 업데이트 및 버그 수정을 지원하는 버전이다. 일반 버전과 달리 안정성에 중점을 둔 버전으로, 기능 업데이트는 최소한으로 이루어지거나, 아예 없는 반면 보안 업데이트의 지원이 일반 버전보다 훨씬 길다. 그렇기 때문에 서버 등 최신 기능보다 안정성이 중요한 곳에서 많이 쓰이며, 기업이나 기관 등에서 기능 업데이트로 인해 이용 중인 다른 소프트웨어가 영향을 받는 것을 피하기 위해 이용하기도 한다. 자바 8, 11, 17은 모두 LTS(Long Term Support) 버전이다. JAVA 8 Lamda Expression 도입 Lambda Expression은 익명 함수를 생성하기 위한 표현식. 익명 클래스의 한 개의 메소드.. 2023. 4. 17.
멀티 스레드 환경에서 발생하는 이슈 프로세스는 프로그램을 수행하는 데 필요한 데이터와 메모리 등의 자원(resources)과 쓰레드로 구성되어 있다. 프로세스의 자원을 이용해서 실제 작업을 수행하는 것이 바로 쓰레드이다. 하나의 프로세스는 하나 이상의 쓰레드를 가지며, 둘 이상의 쓰레드를 가진 프로세스를 '멀티쓰레드 프로세스(multi-threaded process)'라고 한다. 멀티 스레드 환경에서는 여러 스레드가 동시에 하나의 자원을 공유한다. 그렇기 때문에 같은 자원을 두고 경쟁상태(raceCondition)와 같은 문제가 발생하는 것이다. 가시성 이슈 가시성 문제는 여러 개의 스레드가 사용됨에 따라, CPU Cache Memory와 RAM의 데이터가 서로 일치하지 않아 생기는 문제를 의미한다. 한 스레드가 변경된 값을 cache m.. 2023. 4. 17.