본문 바로가기
728x90

[Spring]41

IoC(Inversion of Control) & DI(Dependency Injection) IoC(Inversion of Control) 제어의 역전이라는 뜻으로 프로그램의 제어 흐름을 개발자가 아닌 외부에서 관리하는 것을 말한다. 애플리케이션 흐름의 주도권이 뒤바뀐 것으로 스프링이 주도권을 갖는다. DI(Dependency Injection) IoC 개념을 조금 구체화시킨 것으로 의존성을 주입하는 것을 뜻한다. DI는 객체 간의 관계를 느슨하게 해 준다. 의존성 주입의 예 A 클래스가 B 클래스의 기능을 사용할 때 'A클래스는 B클래스에 의존한다'라고 한다. -> 'A 클래스의 프로그래밍 로직에 B 클래스가 필요하다.' 즉, B 클래스에게 의지(의존)한다. 클래스 내부에서 다른 객체를 생성하게 되면 두 클래스 간에 의존 관계가 성립한다. 클래스 내부에서 new를 사용해 참조할 클래스의 객체를.. 2022. 10. 12.
Spring 삼각형 - POJO(Plain Old Java Object) POJO(Plain Old Java Object) Java로 생성하는 순수한 객체라는 뜻으로, POJO 프로그래밍이란 순수 자바 객체만을 사용하여 프로그래밍 코드를 작성하는 것을 말한다. POJO 프로그래밍을 위한 기본적인 규칙 Java나 Java의 스펙에 정의된 것 이외에는 다른 기술이나 규약에 얽매이지 않아야 한다. 특정 환경에 종속적이지 않아야 한다. POJO 프로그래밍이 필요한 이유 특정 환경이나 기술에 종속적이지 않으면 재사용이 가능하고, 확장 가능한 유연한 코드를 작성할 수 있다. 코드가 깔끔해지기 때문에 디버깅하기 쉬워진다. 특정 기술이나 환경에 종속적이지 않기 때문에 테스트도 단순해진다. 객체지향적인 설계를 제한없이 적용할 수 있다. 2022. 10. 11.
프레임워크(Freamework)와 라이브러리(Library)의 차이 프레임워크(Freamework)와 라이브러리(Library)의 차이 자동차에 비유한다면 차체를 구성하는 기본 틀은 프레임워크이며, 바퀴 혹은 엔진과 같은 다양한 기능을 제공하는 부품들이 라이브러리라고 할 수 있다. 실제로 자동차를 구매 후 각 부품은 비교적 쉽게 교체할 수 있지만, 차체가 망가져 프레임을 교체하는 건 너무 어려운 일이다. 프레임워크는 개발자가 개발을 쉽게 할 수 있도록 뼈대를 제공한다. 라이브러리는 개발에 필요한 것을 미리 구현해 놓은 도구이다. 이를 명료하게 표현하면 애플리케이션에 대한 제어권의 차이가 있다고 이야기할 수 있다. IoC(Inversion od Control) / 제어의 흐름이 어디에 있는가? 라이브러리는 개발자가 짜 놓은 코드 내에서 필요한 기능이 있으면 해당 라이브러리.. 2022. 10. 11.
프레임워크(Framework)란? 프레임워크란 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것이다. - Ralph Johnson - 프레임워크(Framework) 프로그래밍을 하기 위한 어떠한 틀이나 구조를 뜻한다. 프레임워크의 장점 효율적으로 코드를 작성할 수 있다. 기본 구조가 만들어져 있기 때문에(framework가 라이브러리 형태로 기능을 제공함) 개발자는 애플리케이션의 핵심 로직을 개발하는 것에 집중할 수 있다. 정해진 규약이 있어 애플리케이션을 효율적으로 관리할 수 있다. framework의 규약에 맞에 코드를 작성하기 때문에 유지보수가 필요한 경우 빠르고 쉽게 문제점을 파악해 수정할 수 있다. 동시에 타인이 작성한 코드 역시 빠르게 파악이 가능하다. 프레임.. 2022. 10. 11.
객체 지향 설계와 스프링 스프링에서의 객체 지향 설계 스프링은 DI(Dependency Injection, 의존관계 주입)와 DI 컨테이너로 다형성 + OCP,DIP를 가능하게 지원한다. 클라이언트 코드의 변경없이 기능 확장(쉽게 부품을 교체하듯이 개발) 스프링이 없던 시절... 좋은 객체 지향 개발을 하기위해 OCP, DIP 원칙을 지키면서 개발을 하면 할 일이 너무 많다. 원칙을 지키기 위한 개발이 실제 개발을 하기위한 코드보다 더 많았다. 그래서 프레임워크로 만들어버림. 순수하게 자바로 OCP, DIP 원칙을 지키면서 개발을 해보면 결국 스프링 프레임워크를 만들게 된다.(더 정확히는 DI 컨테이너) 실무 고민 인터페이스를 도입하면 추상화라는 비용이 발생한다. 기능을 확장할 가능성이 없다면, 구체 클래스를 직접 사용하고, 향.. 2022. 10. 11.
좋은 객체 지향 설계의 5가지 원칙 : SOLID SRP(Single Responsibility Principle) 단일 책임 원칙 하나의 클래스는 하나의 책임만을 가져야한다. 그러나, 하나의 책임이라는 것은 모호하다. 클 수 있고, 작을 수 있으며, 문맥과 상황에 따라 다르다. 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것이다. ex) UI 변경하는데 다 뜯어 고쳐야한다? 객체지향적이지 못함. 객체의 생성과 사용을 분리 OCP(Open/Closed Principle) 개방-폐쇄 원칙(가장 중요) 소프트웨어 요소는 확장에는 열려있으나, 변경에는 닫혀있어야한다. 다형성을 활용하자. 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현 OCP를 지킬 수 없는 문제점 클라이언트가 구현 클래스를 직접.. 2022. 10. 11.
좋은 객체 지향 프로그래밍이란? 객체 지향 프로그래밍 컴퓨터 프로그램을 명령어의 목록으로 보는 것이 아닌 여러 개의 독립된 객체들의 모임으로 파악한다. 각 객체는 메시지를 주고받고, 협력하여 데이터를 처리할 수 있다. 유연하고 변경이 용이하게 만들기 때문에 대규모 개발 프로젝트에 많이 사용된다. 유연성과 변경 용이성 -> 다형성(Polymorphism) 레고 블록 조립하듯이 어떤 부품을 갈아 끼우듯이 컴포넌트를 쉽고 유연하게 변경하면서 개발하는 것을 뜻함 역할과 구현을 분리 역할과 구현으로 구분하면 세상은 단순해지고, 유연 해지며 변경도 편리해진다. 클라이언트는 단순히 대상의 역할만 알면 된다. 클라이언트는 구현 대상의 내부 구조를 몰라도 된다. 클라이언트는 구현 대상의 내부 구조가 변경되어도 영향을 받지 않는다. 클라이언트는 구현 대.. 2022. 10. 10.
스프링이란? 스프링의 핵심 스프링은 자바 언어 기반의 프레임워크이다. 자바 언어의 가장 큰 특징은 객체 지향 언어라는 점이다. 스프링은 객체 지향 언어가 가진 특징을 살려 좋은 객체 지향 애플리케이션을 개발할 수 있도록 도와주는 프레임워크이다. 스프링의 종류 필수 : 스프링 프레임워크, 스프링 부트 옵션 : 스프링 데이터, 스프링 세션. 스프링 시큐리티, 스프링 Rest Docs, 스프링 배치, 스프링 클라우드 등이 있다. 스프링 프레임워크 핵심 기술 : 스프링 DI 컨테이너, AOP, 이벤트 등 웹 기술 : 스프링 MVC, 스프링 WebFlux 데이터 접근 기술 : 트랜잭션, JDBC, ORM 지원, XML 지원 기술 통합 : 캐시, 이메일, 원격접근, 스케줄링 테스트 : 스프링 기반 테스트 지원 언어 : 코틀린,.. 2022. 10. 10.
728x90