tech/Spring 15

[Spring] SOLID 원칙을 잘 지키고 있는가

문제상황할인 정책은 두 가지가 있다.1. FixDiscountPolicy() : 고정 할인2. RateDiscountPolicy() : 비율 할인 이때 우리는 할인 정책을 변경하기 위해 FixDiscountPolicy()에서 RateDiscountPolicy()으로 바꾸려고 한다. 여기서 문제 발생! 우리는 역할과 구현을 충실하게 분리했다. OK 다형성도 활용하고, 인터페이스와 구현 객체를 분리했다. OK OCP, DIP 같은 객체지향 설계 원칙을 충실히 준수했다. -> 그렇게 보이지만 사실은 아니다. DIP: 주문서비스 클라이언트(OrderServiceImpl )는 DiscountPolicy 지킨 것 같은데?클래스 의존관계를 분석해 보자.추상(인터페이스) 뿐만 아니라 인터페이스에 의존하면서 ..

tech/Spring 2025.07.04

[Spring] long VS Long

구조적 차이에 따른 동작 차이1. 값의 저장과 접근long: 값 자체를 바로 사용.연산 시 빠르게 처리됨.Long:내부적으로 long 값이 들어 있지만, 사용 시 힙의 객체 참조를 통해 접근.박싱/언박싱 발생. 2. null 가능 여부long x = null; → 컴파일 에러Long y = null; → 정상, 객체가 없는 상태를 표현 가능 Long을 쓰는 이유DB의 PK/ID는 생성되기 전 null 상태를 표현해야 하므로 Long 사용.컬렉션(List, Map 등)에 담기 위해 Long 사용.메서드나 기능을 사용해야 할 경우 Long 사용.ORM 매핑(JPA, MyBatis 등)에서 nullable 컬럼과 대응하기 위해 Long 사용. 요약 long = 스택에 값 직접 저장, null 불가,..

tech/Spring 2025.07.03

[Spring] enum이란?

enum (enumeration, 열거형) 서로 연관된 상수들을 한곳에 모아 이름으로 관리하기 위한 자바의 특수한 데이터 타입이다. 이렇게 하면 요일을 문자열이나 숫자로 관리하는 것보다 타입 안정성(type safety) 있게 관리 가능하다. enum을 쓰는 이유 의미 있는 이름 부여로 가독성 향상 (ex: Direction.NORTH vs 0)타입 안전 보장: 잘못된 값이 들어가는 것을 방지switch문, if문에서 가독성 높게 사용 가능다른 클래스와 동일하게 필드, 메서드, 생성자 추가 가능 특징enum은 java.lang.Enum을 상속 (다른 클래스를 상속할 수는 없음)내부적으로 public static final 상수처럼 동작생성자에 접근 제한이 걸려 있어 외부에서 인스턴스 생성 불..

tech/Spring 2025.07.03

[Spring] 좋은 객체 지향 프로그래밍이란?

객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지 를 주고받고, 데이터를 처리할 수 있다. 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프 트웨어 개발에 많이 사용된다. • 추상화• 캡슐화• 상속• 다형성 이 중에서도 다형성에 대해서 집중적으로 볼 것이다. 다형성 Polymorphism 실세계와 객체 지향을 1:1로 매칭이 어렵다.그래도 실세계의 비유로 이해하기에는 좋다.역할과 구현으로 세상을 구분 운전자는 K3에서 아반떼로 바꿔도 운전을 할 수 있어야 한다. 자동차가 바뀌어도 운전자한테 영향X자동차라는 역할을 만들고 그 구현을 분..

tech/Spring 2025.06.24

[Spring] 스프링이란?

스프링은 특정한 하나가 아니라 여러가지 기술들의 모음집이라고 볼 수 있다. 스프링 데이터: 데이터베이스가 관계형 데이터베이스던 NoSQL이든 몽도디비든 레디스든 기본적인 등록, 수정, 삭제, 조회 CRUD 이건 다 비슷하기 때문에 이런 것들을 굉장히 편리하게 사용할 수 있도록 도와주는 기술이다.제일 많이 스프링 데이터 JPA를 많이 쓴다 스프링 세션:세션 기능을 좀 더 편리하게 사용할 수 있도록 도와준다. 스프링 시큐리티:보안과 관련된거다. 스프링 Rest Docs:API 문서와 테스트를 편하게 역어서 API 문서를 편리하게 해준다 스프링 배치:보통(백엔드) 애플리케이션이라고 생각을 하면 그냥 API같은 거 만들고 아니면 화면 만들고를 생각하는데 실무에서는 천만명의 데이터를 한번에 업데이트를 하기는 ..

tech/Spring 2025.06.24