ORM
One-to-One
두 엔티티가 1대 1로 대응하는 관계
당근 마켓을 예로 들면,
적절한 예시는 아니지만 거래 완료된 물건이 접시나 인형처럼 여러 개가 아닌, 탁자나 선풍기처럼 1개라는 조건으로
1명의 소유자는 1개의 물건을 갖고,
1개의 물건은 1명의 소유자를 갖으므로 One-to-One 관계를 갖습니다.
One-to-Many
두 엔티티가 1대 N으로 대응하는 관계
당근 마켓을 예로 들면,
한 명의 유저는 여러 상품을 업로드하여 판매할 수 있고,
한 개의 상품은 1명의 유저로 인해 판매되므로 One-to-Many 관계를 갖습니다.
Many-to-Many
두 엔티티가 M대 N으로 대응하는 관계
다시 당근 마켓으로 예를 들면,
한 명의 유저는 여러 지역에서 활동할 수 있고,
한 지역은 여러 유저가 활동 가능하므로 Many-to-Many 관계를 갖습니다.
N+1 문제
1대 N 관계 구조에서 쿼리 1번으로 N건을 가져왔는데, 쿼리가 N번 실행되는 문제 현상
→ 보통 eager loading 등의 방법으로 해결됨!
eager loading
- 로딩시 참조해야 하는 정보를 미리 명시하는 일
- 보통 Join을 이용하여 해결
- eager loading을 이용하면 N번 실행될 것이 1번만 실행되므로 훨씬 효율적으로 해결됨
객체 지향이란?
객체 지향 프로그래밍은 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호 작용을 통해 로직을 구성하는 프로그래밍 방법이다.
객체 지향 프로그래밍은 작은 문제들을 해결할 수 있는 객체들을 만든 뒤, 이 객체들을 조합해서 큰 문제를 해결하는 Bottom-Up 방식을 이용한다.
추상화
공통의 속성이나 기능을 묶고 이름을 붙여서 불필요한 정보를 숨기거나 중요한 정보만을 표현하는 것
장점
- 코드 재사용이 용이
- 유지 보수가 쉬움
- 대형 프로젝트에 적합
리팩터링이란?
리팩터링(refactoring)은 결과의 변경 없이 코드의 구조를 재조정하는 것을 이야기한다.
특징
- 코드의 구조를 재조정하여 가독성을 높이고 유지 보수를 편하게 함
- 기본 논리 단순화
- 복잡성 제거 및 버그나 취약성 해결에 도움
- 소프트웨어의 기능 보존
방법
- 중복 코드 추출
- 장황한 메소드 축소 또는 별도의 메소드로 추출
- 방대한 클래스 축소 또는 별도의 클래스로 추출
- 매개 변수들을 객체 통째로 전달 또는 메소드로 전환하여 전달
테스트 코드
말 그대로 프로그램을 작성하고 문제가 없는지 확인하는 코드
테스트 코드를 작성하는 이유
- 빠른 피드백
- 실시간 자동 검증 가능
- 개발자가 만든 기능 보호
- 디버깅 시간 투자 감소
- 테스트 코드를 통해 다른 개발자들이 코드의 동작을 더 쉽게 이해(주석의 역할과 비슷)
TDD
반복 테스트를 이용한 소프트웨어 방법론으로, 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하며 구현한다. 프로그래밍의 의사결정과 피드백 사이의 간극을 의식하고 이를 제어하는 테스트 코드 분석 기술
TDD 개발 주기
<Red>단계에서는 실패하는 테스트 코드를 먼저 작성한다.
<Green>단계에서는 테스트 코드를 성공시키기 위한 실제 코드를 작성한다.
<Yellow>단계에서는 중복 코드 제거, 일반화 등의 리팩토링을 수행한다.
장점
- 코드 재사용 보장
- 의존성이 낮은 모듈로 소프트웨어 개발 가능
- 튼튼한 객체 지향 코드 생산
- 재설계 시간 단축
- 디버깅 시간 단축
- 추가 구현의 용이함
관련글
'개념 스터디' 카테고리의 다른 글
관점 지향 프로그래밍(Aspect Oriented Programming, AOP) (1) | 2024.01.14 |
---|---|
제어 역전(Inversion of Control, IoC)과 의존성 주입(Dependency Injection, DI) (0) | 2024.01.14 |
[개념 스터디] 3주차 (0) | 2021.08.17 |
[개념 스터디] 2주차 (0) | 2021.08.08 |
[개념 스터디] 1주차 (1) | 2021.07.31 |