[WIL] GDSC OC - BE STUDY - WEEK 3

최병훈·2023년 4월 7일
0
post-thumbnail

✔️ 의존과 의존성

▪️ 의존

프로그래밍에서 의존(dependency)이란, 한 요소가 다른 요소를 필요로 하는 관계를 말한다.
예를 들어, 클래스 A가 클래스 B를 사용한다면, A는 B에 대해 의존하고 있다.

▪️ 의존성

객체 간의 의존 관계를 관리하기 위해 의존성(dependency) 개념이 도입되었다.
의존성은 의존 관계를 구체화한 것으로, 일반적으로 클래스 간의 의존성이 가장 많이 사용된다.
예를 들어, 클래스 A가 클래스 B에 의존하고 있다면, A 클래스는 B 클래스에 대한 의존성을 가지고 있다고 말할 수 있다.

💡 의존성 관리의 중요성

  1. 코드 재사용성의 향상
    올바른 의존성 관리를 통해 독립적인 컴포넌트를 만들 수 있다. 이러한 컴포넌트는 다른 프로젝트에서도 재사용할 수 있으며, 이는 개발 생산성을 향상시키고 코드의 효율성을 높이는 데 큰 도움이 된다.

  2. 유지 보수성의 향상
    의존성 관리를 잘 처리하면 코드의 유지 보수성이 향상된다. 코드의 변경 사항이 다른 컴포넌트에 미치는 영향을 줄이면서, 코드의 수정업데이트가 더욱 쉬워지기 때문.

  3. 테스트의 용의성
    의존성 관리를 잘 처리하면 단위 테스트통합 테스트를 쉽게 구현할 수 있다. 특히 의존성 주입(Dependency Injection)과 같은 기술을 활용하면 테스트 코드를 더욱 간편하게 작성할 수 있다.

✔️ @Autowired 의존성 주입

@Autowired스프링 프레임워크에서 사용되는 의존성 주입(Dependency Injection) 방법 중 하나이다.

▪️ 의존성 주입

의존성 주입은 객체 지향 프로그래밍에서 결합도(Coupling)를 낮추기 위해 사용된다.

의존성 주입은 객체가 자신이 사용할 다른 객체를 직접 생성하거나 참조하지 않고, 외부에서 주입받도록 하는 방법이다. 이를 통해 객체 간의 결합도를 낮출 수 있다.

예를 들어, A 객체가 B 객체를 사용해야 할 때, A 객체에서 직접 B 객체를 생성하거나 참조하면 A 객체와 B 객체 간의 결합도가 높아진다. 이를 의존성 주입을 사용하여 해결하면, A 객체는 B 객체를 외부에서 주입받아 사용하므로 결합도가 낮아진다. 이렇게 구현된 코드는 유지보수하기 쉽고, 테스트하기도 용이하다.

▪️ @Autowired

스프링@Autowired 어노테이션을 통해 자동으로 의존성을 주입해주며, 이를 통해 개발자는 의존성 주입을 위한 별도의 코드 작성 없이도 객체 간의 의존성을 간편하게 처리할 수 있다.

@Autowired 어노테이션을 통해 의존성을 주입받으면, 개발자는 코드 내에서 의존성을 직접 생성하거나 조작할 필요가 없으며, 스프링 컨테이너가 관리하는 객체를 자동으로 사용할 수 있다. 이를 통해 코드의 복잡도를 줄이고, 유지보수성을 향상시킬 수 있다.

✔️ DIP

DIP(Dependency Inversion Principle)객체 지향 설계 원칙 중 하나로, 상위 수준 모듈은 하위 수준 모듈에 의존해서는 안 되고, 둘 모두 추상화에 의존해야 한다는 원칙이다.
이를 통해 결합도를 낮추고 유연한 코드를 작성할 수 있다.

DIP를 적용하면, 추상화의존성 주입을 통해 객체 간의 결합도를 낮출 수 있다.
예를 들어, 인터페이스를 이용하여 추상화를 수행하고, 구체적인 구현은 DI(Dependency Injection)를 통해 주입하면, 클라이언트 코드는 구체적인 구현에 의존하지 않고 인터페이스에만 의존한다. 이를 통해 클라이언트 코드와 구현체 사이의 결합도가 낮아지며, 유지보수성과 확장성이 높아진다.

✔️ 스프링 빈과 스프링 컨테이너란?

▪️ 스프링 빈

스프링에서 관리되는 객체를 말한다. 즉, 스프링에서 개발자가 작성한 객체가 스프링에 등록되어 스프링이 관리할 수 있는 객체를 말한다. 이러한 스프링 빈스프링 컨테이너에서 관리된다.

스프링 빈은 일반적으로 @Component, @Service, @Repository, @Controller 등의 어노테이션을 사용하여 등록된다. 또한, XML 설정 파일을 이용하여 등록할 수도 있다.

▪️ 스프링 컨테이너

스프링 컨테이너는 스프링에서 스프링 빈을 관리하는 컨테이너이다. 즉, 스프링에서 개발자가 작성한 객체들을 등록하고, 생성하고, 관리하는 역할을 수행한다. 스프링 컨테이너는 스프링 빈을 생성하고, 필요한 의존성을 주입하며, 필요에 따라 스프링 빈을 제거하는 등의 역할을 수행한다.

스프링 컨테이너는 스프링 빈을 생성하고 관리함으로써 의존성 주입(Dependency Injection)과 관련된 작업을 수행한다. 이를 통해 개발자는 객체 간의 결합도를 낮추고 유연한 코드를 작성할 수 있다.

✔️ JDBC와 JPA?

▪️ JDBC

JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접근하기 위한 API이다. JDBC를 이용하면 자바 애플리케이션에서 데이터베이스에 접속하고, SQL을 이용하여 데이터를 조회, 수정, 삭제할 수 있다.
JDBC는 데이터베이스에 대한 직접적인 접근 방식으로, SQL 쿼리를 직접 작성해야 하며, 개발자가 모든 데이터베이스 처리 작업을 수동으로 처리해야 한다.

▪️ JPA

JPA(Java Persistence API)는 자바에서 ORM(Object-Relational Mapping) 기술을 사용하여 데이터베이스와 상호작용하는 API이다. JPA를 사용하면 개발자는 객체 중심으로 데이터를 다룰 수 있으며, 객체를 데이터베이스에 저장하거나 데이터베이스에서 조회할 때 객체와 SQL 사이의 매핑 작업을 자동으로 처리할 수 있다. JPA는 개발자가 직접 SQL을 작성하는 것이 아니라, 객체 지향적인 방식으로 데이터를 다룰 수 있도록 지원한다.

💡 JDBC와 JPA의 차이

JDBCJPA는 모두 자바에서 데이터베이스와 상호작용하는 기술이지만, 접근 방식이 다르다.
JDBC는 데이터베이스에 대한 직접적인 접근 방식으로, 개발자가 직접 SQL을 작성하고 모든 데이터베이스 처리 작업을 수동으로 처리해야 한다.
반면 JPA는 ORM 기술을 사용하여 객체를 데이터베이스에 저장하거나 조회할 때 SQL과 객체 사이의 매핑 작업을 자동으로 처리할 수 있으며, 객체 지향적인 방식으로 데이터를 다룰 수 있다. 따라서, JPA를 사용하면 개발자는 SQL 작성 및 데이터베이스 처리 작업을 줄일 수 있으며, 유지보수성과 생산성을 높일 수 있다.

0개의 댓글