본문 바로가기

Java59

스프링 빈(BeanFactory, ApplicationContext, ComponentScan, 의존관계 주입 방법 등) BeanFactory와 ApplicationContext BeanFactory 스프링 컨테이너의 최상위 인터페이스다. 스프링 빈을 관리하고 조회하는 역할을 담당한다. getBean()을 제공한다. ApplicationContext BeanFactory 기능을 모두 상속받아서 제공한다. 빈을 관리하고 검색하는 기능을 BeanFactory가 제공해주는데, 그러면 차이는 무엇일까? 애플리케이션을 개발할 때는 빈을 관리하고 조회하는 기능은 물론이고, 수 많은 부가기능이 필요하다. 따라서 ApplicationContext는 빈 관리 기능 + 편리한 부가 기능을 제공한다고 생각하면 된다. BeanFactory를 직접 사용할 일은 거의 없다. 부가기능이 포함된 ApplicationContext를 사용한다. BeanF.. 2023. 7. 2.
좋은 객체 지향 설계의 5가지 원칙(SOLID) SOLID 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리 SRP: 단일 책임 원칙(Single Responsibility Priciple) OCP: 개방-폐쇄 원칙(Open/closed Priciple) LSP: 리스코프 치환 원칙(Liskov Substitution Priciple) ISP: 인터페이스 분리 원칙(Interface Segregation Priciple) DIP: 의존관계 역전 원칙(Dependency Inversion Priciple) SRP(Single Responsibility Priciple) - 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. 클 수 있고, 작을 수 있다. 문맥과 상황에 따라 다르다. 중요한 .. 2023. 6. 22.
정적 팩토리 메서드, 인스턴스 캐싱 TDD, 클린 코드 with Java - 로또 미션 GitHub - oneny/java-lotto: 로또 게임 구현을 관리하는 저장소 로또 게임 구현을 관리하는 저장소. Contribute to oneny/java-lotto development by creating an account on GitHub. github.com 한 사람이 LottoTicket 10장을 산 경우 60개의 LottoNumber 객체가 생성된다. 여기서 문제점은 LottoNumber는 1 ~ 45의 고정된 값인데에도 불구하고 같은 번호라도 새로운 인스턴스를 생성하고, 가비지 컬렉션 등 부담이 될 수 있다. 즉, 로또를 사려는 사람이 1만명인 경우 10장씩 사면 서로 다른 LottoNumber 인스턴스 60만개가 생성되는 것은 너.. 2023. 4. 30.
함수형 인터페이스와 람다식 + 전략패턴 함수형 인터페이스(Functional Interface) 함수형 인터페이스란? 함수형 인터페이스(Fuctional Interface)란, 하나의 추상 메서드(abstract method)만을 갖는 인터페이스를 말한다. 그리고 람다식은 이러한 함수형 인터페이스를 기반으로 작성이 가능하다. 왜 생겼을까? 위에서 말한 것처럼 함수형 인터페이스를 사용하는 이유는 람다식은 함수형 인터페이스로만 접근이 가능하기 때문이다. 사진에서 위 메서드는 Comparator의 추상 메서드이다. 그리고 아래는 람다식인데 람다식의 매개변수는 연관된 인터페이스의 메서드, 즉 추상 메서드에 의해 결정된다. 따라서 보는 것과 같이 Comparator의 경우, compare 메서드를 사용하기 때문에 두 개의 인수가 있고, 람다식을 사용할.. 2023. 4. 19.
익명 클래스, 인터페이스 익명 구현 객체 함수형 인터페이스에 대해 공부하던 중에,, 분명히 interface는 객체를 생성할 수 없다고 배웠는데 Consumer 인터페이스를 통해서 객체를 생성하고 있는 것에 대해 이해가 되지 않았다. 그래서 검색을 통해 찾아보니 인터페이스 익명 구현 객체라는 것을 통해서 구현을 할 수 있다는 것을 알게 되었다. 익명 클래스 익명 클래스는 내부 클래스(Inner class) 일종으로 단어 그대로 이름이 없는 클래스를 말한다. 익명, 이름이 없다는 것은 별로 기억되지 않아도 된다는 것이며, 나중에 다시 불러질 이유 즉, 재사용할 일이 없다는 뜻으로 프로그램에서 일시적(단발적)으로 한 번만 사용되고 버려지는 객체라고 볼 수 있다. 왜 생겼을까? 일회성의 구현 객체를 만들기 위해 소스파일을 만들고 클래스를 선언하는 것.. 2023. 4. 14.