본문 바로가기

분류 전체보기

(155)
[Spring Basic] 스프링 컨테이너와 스프링 빈 스프링 컨테이너의 생성 과정저번 글에서는 순수한 자바만으로 DI를 적용했다. 이제 AppConfig를 스프링 기반으로 변경해 보자.@Configurationpublic class AppConfig { @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); }} AppConfig에 설정을 구성한다는 뜻의 @Configuration을 붙여주고, 각 메서드에 @Bean을 붙여준다. 실..
[Spring Basic] 스프링은 어떻게 OCP, DIP를 지킬까? - DI(의존관계 주입) 결론부터 말하자면, 스프링은 다음 기술로 다형성과 OCP, DIP를 가능하게 해 준다.DI(Dependency Injection): 의존관계 주입DI 컨테이너: 자바 객체들의 의존관계 연결, 주입이 기술들을 통해 클라이언트 코드의 변경 없이 기능을 확장할 수 있는 것이다. 옛날 어떤 개발자가 좋은 객체지향 프로그래밍을 하려고 OCP, DIP를 지키면서 개발해 보니, 배보다 배꼽이 큰 상황인 것이다. 그래서 이를 프레임워크로 만들어버렸고, 그것이 지금의 스프링이 되었다. 순수하게 자바로 OCP, DIP를 지키면서 개발해 보면 결국 스프링 프레임워크를 만들게 된다. (정확히는 DI 컨테이너) 이제부터 이것이 어떻게 만들어졌는지 코드로 이해해 보자.어떤 회원 서비스에 회원 저장소로 메모리 회원 저장소와 JDB..
[Java] enum 타입의 ==(동일성 비교) vs equals(동등성 비교) 1. 동일성(Identity) 비교 동일성 비교는 == 연산자를 사용하는 것으로, 두 객체가 같은 메모리 주소를 참조하는지를 확인한다.자바에서 하나의 enum 상수는 클래스 로드 시 한 번만 생성되고, 해당 상수는 JVM 내에서 단일 인스턴스를 보장한다. (싱글톤)따라서 동일한 enum 값끼리는 항상 == 비교를 통해 동일성을 확인할 수 있다.public class Example { public enum Day { MONDAY, TUESDAY, WEDNESDAY } public static void main(String[] args) { Day day1 = Day.MONDAY; Day day2 = Day.MONDAY; // 동일성 비교 ..
[Spring Basic] 좋은 객체지향 설계 5가지 원칙 - SOLID 좋은 객체지향 설계 5가지 원칙 SOLID는 각각 다음을 뜻한다.S - SRP - 단일 책임 원칙 - Single Responsibility PrincipleO - OCP - 개방 폐쇄 원칙 - Open Closed PrincipleL - LSP - 리스코프 치환 원칙 - Liskov Substitution PrincipleI - ISP - 인터페이스 분리 원칙 - Interface Segregation PrincipleD - DIP - 의존관계 역전 원칙 - Dependency Inversion Principle  SRP - 단일 책임 원칙한 클래스는 '하나의 책임'만 가져야 한다.여기서 하나의 책임이라는 것이 조금 모호하다. 클 수도 있고 작을 수도 있으며, 문맥과 상황에 따라 다를 수도 있다. 여기..
[Spring Basic] 스프링의 핵심과 다형성 스프링이 뭘까? 왜 만들었을까? 핵심은 뭐지?스프링은 스프링 프레임워크와 스프링 부트를 모두 포함한 스프링 생태계를 뜻한다. 좁게 말하자면 스프링 DI 컨테이너 기술이다.아무리 복잡한 기술이라도 그 기술의 핵심은 단순하다. 그 핵심을 모르고 사용한다면 그저 단순하게 사용법만 알고 있는 것이다. 그러면 스프링의 핵심은 뭘까? 웹 애플리케이션 편하게 개발하게 해주고, DB 접근 편하게 해주는 기술일까? 맞는 말이지만 핵심은 아니다. 스프링의 진짜 핵심은 스프링이 자바 기반의 프레임워크라는 것을 보면 알 수 있다. 자바 언어의 가장 큰 특징은 객체지향 언어라는 것이다. 즉, 스프링은 "좋은 객체지향 애플리케이션"을 개발할 수 있도록 도와주는 프레임워크다. 스프링 이전의 개발자들은 EJB라는 기술에 종속적으로 ..