본문 바로가기

전체 글

(92)
[keka] 보호되어 있는 글입니다.
[react] 보호되어 있는 글입니다.
[JAVA] Enum 활용해보기 Enum을 사용하면 그냥 static final 상수를 이용하는 것보다 코드를 깔끔하게 유지할 수 있습니다. 오늘은 이러한 enum 활용법을 정리해보려고 합니다. 1. Enum enum은 서로 관련이 있는 상수의 집합입니다. enum이 나오기 이전에는 클래스의 `private static`이나 `interface`의 상수값을 활용하여 상수집합을 정의하였습니다. a. 기존 상수의 문제점 1. 서로 다른 상수집합은 비교하면 안된다. - 기존 상수집합들은 타입만 같으면 비교가 가능하고 나중에 런타임에서 이로 인한 에러를 잡기가 어렵습니다. b. 정의방법 public enum Day { MONDAY, TUESDAY; } class DayStatic { private final static DayStatic MO..
일급 컬렉션(First Class Collection)에 대해 알아보자 💡 tocoble을 보다가 일급 컬렉션을 알게 되었고 이에 대해 알게된 내용을 정리해두려고 합니다. 1. 일급 컬렉션 규칙 먼저, 일급 컬렉션의 규칙에 대해서 알아봅시다. 클래스는 컬렉션을 제외하고 다른 어떤 멤버 변수가 없어야 함 컬렉션을 Wrapping하면서 Wrapping한 Collection외 다른 멤버 변수가 없는 상태를 뜻함 2. 예시 SafariService 사파리서비스가 동물들을 List 자료구조로 직접 관리한다고 가정해봅시다. 만약 우리가 에버랜드의 사파리 서비스를 운영한다면 여러 동물들을 관리할 것입니다. 사파리에 있는 동물들은 정해진 최소 에너지를 가지고 있어야합니다. 이를 위해서 SafariService는 관리하는 동물들이 조건에 부합하는지 확인하는 로직이 필요합니다. class Saf..
추상클래스와 인터페이스 차이를 생각해보기 🤨 추상클래스와 인터페이스를 비교해보고 생각해본 내용을 기록해두려고 합니다. 추상클래스 추상메서드를 적어도 1개가진 클래스 서로 관련성이 높은 클래스간 공통 코드를 공유하고 확장하려는 목적 추상클래스는 'is kind of' 관계이다. ex) 포유류 - 사람, 조류 - 앵무새 인터페이스 구현된 메서드 없이 추상메서드와 상수만을 가진 클래스 (default와 static 제외) 하나의 클래스는 여러 개의 인터페이스를 구현할 수 있으며 이미 상속을 받은 클래스도 인터페이스를 구현할 수 있음 서로 다른 관련성 없는 클래스들을 논리적으로 같은 기능의 구현을 강제하는 목적 추상클래스와 인터페이스는 사용의도에서 차이점이 있습니다. 추상클래스는 공통메서드를 정의하거나 서로 깊게 연관된 클래스라는 것을 나타냅니다. (동물..
Spring에 Jackson Custom Serialization 적용 스프링부트는 기본적으로 Jackson라이브러리를 통해 자바 기본 컬렉션 객체들을 Json으로 Serialize를 진행해준다. 하지만, 기존 레거시 코드에 있던 사용자 정의객체를 json형태로 반환할 일이 생기면서 에러가 발생했다. 사용자 정의객체를 어떻게 Serialize해야할지 정의되어 있지 않아서 생기는 문제였다. 이를 해결하기 위해 serializtion을 커스터마이징해서 objectMapper에 추가하고 이를 스프링에서 사용할 수 있게 빈 등록해주는 과정을 진행했다. 아래 코드는 HashMap을 상속받은 사용자정의 DataSet객체를 직렬화하는 과정이다. writeObject()를 통해 재귀적으로 관련된 직렬화를 진행하여 json 문자열을 만들어 반환하게 된다. public class DataSe..
⚡️ Scale Out된 환경에서 세션 관리방법 ⚡️ 먼저 다중 서버 환경이 생기는 이유에 대해 알아보자. 트래픽이 증가하면 이를 처리하기 위해 서버의 성능을 향샹시켜야 한다. 이를 위한 두 가지 방법이 있다. Scale Up / Scale Out 스케일업은 단일 서버의 성능을 증카시켜 더 많은 요청을 처리하는 방법 (CPU, 메모리, 디스크 업그레이드) 장점 서버가 하나이므로 데이터 정합성 이슈가 발생하지 않는다. (장점) 단점 일정수준이상 성능이 크게 증가하지 않음 (비효율) 서버가 죽으면 복구전까지 모든 서비스가 중단된다. 스케일아웃은 새로운 서버를 추가하여 트래픽을 각 서버가 나눠가져 더 많은 요청을 처리하는 방법 장점 서버가 여러 대이므로 하나가 죽어도 다른 서버에서 서비스 제공 가능하여 ‘가용성’을 높일 수 있다. 요청량에 따라 필요에 따라 서버..
[객체지향 디자인 패턴] 5장 : 스트래티지 패턴 (전략 패턴) 전략 패턴 전략패턴은 말그대로 전략을 쉽게 바꿀 수 있도록 해주는 디자인 패턴이다. 동일한 문제를 해결하려는 방식이 클래스별로 캡슐화되어있고 필요할 때 이를 직접 수정하지 않고 전략을 교체하여 유연하게 확장하는 패턴이다. Context는 필요에 따라 동적으로 전략을 바꿔낄 수 있다 (전략과 집약관계) Strategy는 외부에서 호출하는 방식을 명시한다. ConcreteStrategy는 전략을 실제로 구현한 클래스이다. 문제가 되는 코드를 먼저 살펴보자. 해결하려는 문제의 코드 public abstract class Robot { private String name; public Robot(String name) { this.name = name; } public String getName() { retu..

반응형