본문 바로가기

Back-end/Spring8

[Spring] 싱글톤 컨테이너 웹 애플리케이션과 싱글톤기존 appConfig 방식으로 객체를 생성하면, 호출할 때마다 새로운 객체를 생성한다.이렇게 되면 우리가 100번의 요청을 하면 100개의 객체가 만들어져서 메모리 효율 상 좋지 않다.이를 해결하기 위해 나온 것이 싱글톤이다. 싱글톤 패턴클래스의 인스턴스가 딱 1개만 생성되는 것을 보장이를 위해서는 해당 클래스의 생성자를 private로 만든다. -> 외부에서 new를 통해서 새로 객체를 만들지 못한다.package hello.core.singleton; public class SingletonService {//1. static 영역에 객체를 딱 1개만 생성해둔다.private static final SingletonService instance = new SingletonSe.. 2024. 11. 14.
[spring] 스프링 컨테이너와 스프링 빈 스프링 컨테이너 생성ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);이렇게 하면 스프링 컨테이너가 생성된다. ApplicationContext는 인터페이스이다. AnnotationConfigApplicationContext는 이 인터페이스의 구현체이다. 스프링 컨테이너를 만들 때에는 구성정보를 설정해주어야한다. 여기서는 AppConfig.class를 구성정보로 지정하였다. 스프링 컨테이너는 파라미터로 넘어온 설정 클래스 정보로 스프링 빈을 등록한다.빈 이름은 메서드 이름으로 만들어지고, 직접 부여할수도 있다.빈 이름은 무조건 서로 달라야한다. 스프링 컨테이너는 설정 정보를 참고해서 .. 2024. 10. 4.
[spring] 관심사 분리 나는 spring의 기초부터 배웠다기보다는 정말 구현을 위한 지식만을 쌓았어서 spring이 어떤 면에서 좋은지, 그리고 의존성 주입 부분이 왜 중요한지 잘 몰랐었는데, 스프링 없이 자바로 관련 기능을 구현해보니까 알 수 있게 되었다.AppConfig로 관심사 분리public class MemberServiceImpl implements MemberService { private final MemberRepository memberRepository = new MemoryMemberRepository; }이런 식으로 memberService에서 사용하는 MemberRepository를 생성할 때 코드에서 바로 구현체를 사용해서 생성하면 DIP를 위배한다(클라이언트는 인터페이스만 코드에 써야.. 2024. 10. 2.
[Spring] 객체지향설계와 스프링 스프링에 객체지향 개념 이야기가 나오는 이유스프링은 DI(Dependency Injection)라는 의존관계 주입과 DI 컨테이너 제공으로 다형성 + OCP와 DIP를 가능하게 지원한다.클라이언트 코드의 변경 없이 기능 확장이 가능하다 스프링이 없던 시절엔 OCP와 DIP원칙을 지키면서 개발을 해보니 너무 할 일이 많았다. 이를 위해 프레임워크를 만들었다. 정리모든 설계에 역할과 구현을 분리하자공연으로 예를 들면 배역만 만들어두고 배우는 언제든지 유연하게 변경할 수 있도록 하는 것이 좋은 객체지향설계이다.이상적으로는 모든 설계에 인터페이스를 부여하자 실무적인 관점에서인터페이스를 도입하려면 추상화라는 비용이 발생한다. -> 예를 들어 특정 코드를 보기 위해 파일을 한번 더 열어보아야한다.따라서 기능을 확장.. 2024. 9. 15.
[Spring] 좋은 객체 지향 설계의 5가지 원칙(SOLID) SRP 단일 책임의 원칙한 클래스는 하나의 책임만 가져야한다.하나의 책임이라는 것은 모호중요한 기준은 변경이다. 변경이 있을 때 파급효과가 적으면 단일책임원칙을 잘 따른 것 OCP 개방-폐쇄 원칙확장에는 열려있으나 변경에는 닫혀 있어야한다.다형성을 활용해보면 이를 구현할 수 있다. -> 기존 코드는 그대로 두고 새로 이를 바탕으로 한 객체를 구현함으로써 해결인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현public class MemberService{ private MemberRepository memberRepository = new MemoryMemberRepository(); private MemberRepository memberRepository = new Jdb.. 2024. 9. 15.
[Spring] 좋은 객체 지향 프로그래밍이란? 객체지향특징추상화캡슐화상속다형성객체지향 프로그래밍프로그램을 여러개의 독립적인 단위 즉 객체들의 모임으로 파악한다. 객체는 메시지를 주고받을 수 있고, 데이터를 처리할 수 있다.객체지향프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들어서 대규모 소프으퉤어 개발에 많이 사용된다. 유연하고 변경이 용이? -> 레고블럭 조립하듯이 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법 다형성다형성을 실세계에 비유하면 운전자 입장에서 자동차라는 큰 틀이 있으면 그 자동차가 테슬라이던, 아반떼이던, 운전자의 역할을 그대로 할 수 있다.로미오와 줄리엣 연극에서 로미오의 역할을 맡은 배우는 줄리엣 역할의 배우가 누구던 영향을 받지 않는다.우리가 키보드의 브랜드를 바꾸어도 기존과 같이 일할 수 있다. 역할과 구현으.. 2024. 9. 15.