ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring Frmework 기본
    공부/spring 2023. 4. 23. 18:26

    Framework 이란

    - 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 이련의 협업화된 형태로 클래스들을 제공하는 것

    - 어떤 대상의 큰 틀이나 외형적인 구조를 의미

    - 기본적으로 프로그래밍을 하기 위한 어떠한 틀이나 구조

     

    Framework 장 단점

    - 효율적인 코드 작성 (개발자가 애플리케이션의 핵심 로직을 개발하는 것에 집중할 수 있도록 해줌)

    - 정해진 규약이 있어 애플리케이션을 효율적으로 관리할 수 있습니다

    - 내가 사용하고자 하는 Framework에 대한 학습 필요

    - 자유롭고 유연한 개발 어려움

     

    핵심 포인트

    - Framework은 기본적으로 프로그래밍을 하기 위한 틀이나 구조를 제공

     


     

     

    Framework vs Library

    - Framework : 틀

    - Library : 기능 집합체

     

    핵심 포인트

    - Framework : 개발자가 애플리케이션의 핵심 로직을 개발하는 것에 집중할 수 있도록 해준다

    - Library : 애플리케이션 흐름의 주도권이 개발자에게 있는 반면 Framework는 애플리케이션 흐름이 주도권이 아닌 개발자가 아닌 Framework에 있다

     


    Spring Framework 이란

     

    1. POJO(Plan Old Java Object) 기반의 구성
    2. DI(Dependency Injection) 지원
    3. AOP(Aspect Oriented Programming, 관점지향 프로그래밍) 지원
    4. Java 언어를 사용함으로써 얻는 장점

    POJO란

    - JAVA로 생성하는 순수한 객체

     

    조건

    - JAVA나 JAVA의 스팩에 정의된 것 이외에는 다른 기술이나 규약에 얽매이지 않아야 한다

    - 특정 환경에 종속적이지 않아야 한다


    IoC란

    - 애플리케이션 흐름의 주도권이 뒤바뀐 것


    DI란

    - 의존성 주입


    Ioc 와 DI 차이

     

    loc코드

    public class Car extends Vehicle {
        @Override
        public void drive() {
            System.out.println("Driving a car");
        }
    }
    
    public class Driver {
        private Vehicle vehicle;
    
        public Driver(Vehicle vehicle) {
            this.vehicle = vehicle;
        }
    
        public void driveVehicle() {
            vehicle.drive();
        }
    }
    
    
    public class Main {
        public static void main(String[] args) {
            Vehicle sedan = new Sedan();
            Vehicle suv = new SUV();
    
            Driver driver1 = new Driver(sedan);
            driver1.driveVehicle(); // Output: Driving a sedan
    
            Driver driver2 = new Driver(suv);
            driver2.driveVehicle(); // Output: Driving an SUV
        }
    }
    
    public class Sedan extends Car {
        @Override
        public void drive() {
            System.out.println("Driving a sedan");
        }
    }
    
    public class SUV extends Car {
        @Override
        public void drive() {
            System.out.println("Driving an SUV");
        }
    }
    
    public class Vehicle {
        public void drive() {
            System.out.println("Driving a vehicle");
        }
    }

    - Sedan과 SUV 클래스는 Car 클래스 상속

    - Car클래스는 Vehicle 클래스 상속

    - 그러므로 Sedan, SUV클래스는 Vehicle 클래스의 메소드를 직접 사용 가능

    - Driver 클래스는 Vehicle 클래스를 인자로 받아들이는 생성자를 가지고 있음

    - Main 클래스에서는 Sedan,SUV 객체를 생성하고 각각을 Driver 객체에 전달

    - Dirver 클래스는 어떤 종류의 Vehicle을 운전하는지 알수 없다

    - 뷰와 모델 사이의 흐름을 변경하는 것이 가능하다

     

    DI코드

    public class Car {
        private Engine engine;
    
        public Car(Engine engine) {
            this.engine = engine;
        }
    
        public void start() {
            engine.start();
            System.out.println("Starting the car");
        }
    }
    
    public class ElectricEngine implements Engine {
        public void start() {
            System.out.println("Starting an electric engine");
        }
    }
    
    public interface Engine {
        void start();
    }
    
    public class GasolineEngine implements Engine {
        public void start() {
            System.out.println("Starting a gasoline engine");
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Engine gasolineEngine = new GasolineEngine();
            Car gasolineCar = new Car(gasolineEngine);
            gasolineCar.start();
    
            Engine electricEngine = new ElectricEngine();
            Car electricCar = new Car(electricEngine);
            electricCar.start();
        }
    }

    - Car 클래스는 Engine 인터페이스에 의존

    - Car 클래스의 생성자에서 Engine 객체를 인자로 받아들이고 이를 내부에서 사용

    - Main 클래스에서는 GasolineEngine,ElectricEngine 객체를 생성하고 각각을 Car 객체에 전달합니다

    - Car클래스는 어떤 종류의 Engine을 사용했는지 알 필요가 없다

    - 컨테이너가 Engine 객체를 생성, Car객체에 자동으로 주입

    - Car클래스는 Engine 인터페이스에만 의존

    - 새로운 Engine이 추가되더라도 Car클래스의 코드를 변경할 필요가 없다

    - 이런 코드는 객체간의 결합도를 낮추고 유연성을 높일수 있다

     

     

    차이점

    - id는 개발자가 수동으로 의존성 주입

    - ioc는 컨테이너가 자동으로 의존성을 주입

    - id는 ioc의 일부분

    - ioc는 di를 구현할 수 있는 방법중 하나

     


    AOP란

    - 애플리케이션에 필요한 기능 중에서 공통적으로 적용되는 공통 기능에 대한 관심과 관련이 있다

    - 애플리케이션의 핵심 업무 로직에서 로깅이나 보안, 트랜잭션 같은 공통 기능 로직들을 분리하는 

     

    공통 관심 사항과 핵심 관심 사항

    - 공통 관심 사항 : 공통적으로 사용되는 기능들

    핵심 관심 사항

    - 비즈니스 로직, 애플리케이션의 주목적을 달성하기 위한 핵심 로직

     

     

    '공부 > spring' 카테고리의 다른 글

    애플리케이션 예외  (0) 2023.05.04
    Mapper  (0) 2023.05.03
    DTO  (0) 2023.05.01
    Controller  (0) 2023.04.28
    DI사용  (0) 2023.04.06
Designed by Tistory.