TDD(Test Driven Development) 란?
TDD 란 소프트웨어 개발 방법론 중 하나로 간단하게 말하자면 테스트 케이스를 먼저 작성하고 그 테스트 케이스를 통과시키기 위한 코드를 작성하는 방법이다.
TDD 는 다음과 같은 단계로 진행된다.
- 우선 실패하는 테스트를 작성한다. (RED)
- 먼저 개발하려는 기능에 대한 테스트 케이스를 작성합니다. 이는 기능이 예상대로 작동하는지 검증하기 위해 사용된다.
- 기능 구현이 안된 상태이기 때문에 테스트는 실패한다.
- 코드 작성 (GREEN)
- 빠르게 테스트를 통과시키기 위한 최소한의 코드를 작성한다.
- 이 과정에서 목표는 테스트 케이스를 통과시키는 것뿐만 아니라 , 코드를 빠르게 작성하는 것이다.
- 리팩토링 (REFACTOR)
- 빠르게 작성한 코드에서 중복을 제거하고 구조를 개선한다.
- 코드의 가독성, 유지보수성, 확장성을 향상시키는 과정이다.
- 이 과정에서 테스트케이스가 계속 통과되는지 확인하면서 코드를 개선해 나간다.
TDD 장점
- 복잡도가 낮은, 테스트 가능한 코드를 구현할 수 있다.
- 쉽게 발견하기 어려운 엣지 케이스를 놓치지 않게 한다.
- 구현에 대한 빠른 피드백을 받을 수 있다.
- 과감한 리팩토링이 가능하다.
- 추가 구현이 용이하다. -> 기존 코드에 어떤 영향을 미칠지 알 수 있다
TDD 단점
- 생산성이 저하된다.
- 개발하던 방식을 바꿔야 해서 초보자들은 적용하는데 힘들다.
- TDD 원칙 때문에 더 중요한 실제 코드를 개발하는데 어려움이 있을 수 있다.
DDD (Domain Driven Design: 도메인 주도 설계) 란?
도메인 주도 설계란 쉽게 말하면, 도메인을 중심으로 설계해 나가는 것을 말한다.
여기서 도메인이라고 하면 실세계에서 사건이 발생하는 집합이라고 생각하면 된다.
쇼핑몰을 예시로 들면
손님들은 옷을 주문하는 주문 도메인이 있고,
점주는 옷들을 관리하는 관리 도메인 같은 것들이 있을 수 있다.
DDD 에는 다음과 같은 특징이 있다.
- 도메인의 모델과 로직에 집중
- 데이터 중심이 아닌 도메인의 모델과 로직에 집중한다.
- Ubiquitous Lanugage, 보편적 언어 사용
- 동일한 표현과 단어로 구성된 단일화된 언어체계를 사용한다.
- 간단하게 말하면 업무 용어를 통일하는 것이다.
- 개발 - 기획 - 사업 까지 모두 사용하는 단일화된 용어를 사용
- Software Entity와 Domain 간 개념의 일치
- 분석 모델과 설계가 다르고 또 그것과 코드가 다른 것이 아닌 도메인 모델부터 코드까지 항상 함께 움직이는 것을 지향한다.
절차지향과 객체지향
절차지향과 객체지향은 프로그래밍 패러다임으로 소프트웨어를 설계하고 구현하는 방법에 대한 접근 방식을 나타낸다.
절차지향 프로그래밍
절차지향 프로그래밍은 프로그램을 데이터와 데이터를 조작하는 함수로 분리하여 작성하는 방식이다.
이런 함수는 데이터를 입력받아 순차적으로 실행하고 결과를 반환한다. 대표적으로 C언어에서 사용되며 순차적인 실행이 중요한 작업에 적합하다.
특징
- 코드가 위에서 아래로 순차적으로 실행된다.
- 데이터 중심이다.
- 함수들은 특정 기능을 수행하기 위해 만들어져 재사용성이 낮다.
- 변수와 함수가 명확하게 분리되어 있다.
객체지향 프로그래밍
객체지향 프로그래밍은 현실 세계의 개념을 모델링하여 소프트웨어를 설계하고 구현하는 방식이다.
객체는 데이터와 그 데이터를 조작하는 함수를 하나의 단위로 묶은 것이다.
대표적으로 Java, C++, Python 등의 언어에서 사용되며 모듈화와 재사용성을 높일 수 있는 장점이 있다.
특징
- 객체 중심이다.
- 캡슐화
- 상속
- 다형성
- 재사용성이 높다.
정리하자면 객체지향은 모듈화와 재사용성을 높이고, 절차지향은 순차적인 프로그램을 구현하는데 적합하다.
함수형 프로그래밍
함수형 프로그래밍은 코드를 작성하는 스타일이라고 할 수 있다.
자료처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임을 의미한다.
언어로는 클로저, 스칼라, 하스켈 등의 언어가 함수형 프로그래밍 언어로 설계되었다.
함수형 프로그래밍은 부작용(side effect)을 최소화하여 코드를 더 예측 가능하고 유지보수하기 쉽게 만든다.
특징
1. 순수 함수 (Pure function)
- 동일한 입력에 항상 같은 값을 반환하는 함수
- 함수의 실행이 프로그램의 실행에 영향을 미치치 않는다.
- 함수 내부에서 인자의 값을 변경하거나 프로그램 상태를 변경하는 Side Effect 가 없다.
2. 비상태, 불변성 (Stateless, Immutability)
- 함수형 프로그래밍에서 데이터는 변하지 않는 불변성을 유지해야 한다.
- 데이터의 변경이 필요한 경우에는 복사본을 만들어 이용한다.
3. 선언형 함수 (Expressions)
- 함수형 프로그래밍은 어떻게 수행할 지 묻는 대신, 무엇을 원하는지를 선언한다.
4. 고차함수
- 고차 함수는 다른 함수를 인자로 받거나 함수를 반환하는 함수를 말한다.
- 이는 함수의 조합과 추상화를 통해 코드를 간결하고 유연하게 만든다.
장점
- 높은 수준의 추상화 제공
- 함수 단위의 코드 재사용 유리
- 불변성을 지향하기 때문에 프로그램 동작 예측 편리
단점
- 순수함수 구현을 위해 코드 가독성이 떨어진다.
- 반복을 for 문 대신 재귀를 사용하기 때문에 무한루프 위험이 있다.
참고
https://inpa.tistory.com/entry/QA-%F0%9F%93%9A-TDD-%EB%B0%A9%EB%B2%95%EB%A1%A0-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%A3%BC%EB%8F%84-%EA%B0%9C%EB%B0%9C
https://jongminfire.dev/%ED%95%A8%EC%88%98%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%9D%B4%EB%9E%80
'CS > 공통' 카테고리의 다른 글
네이티브 앱 vs 웹앱 vs 하이브리드 앱 vs PWA (1) | 2024.03.15 |
---|---|
동기와 비동기, 블로킹과 논블로킹 정리 (1) | 2024.03.15 |