프로그래밍 150

[TDD] 테스트 대역 (Test double)

테스트 대역 (Test Double) 정의 xUnit Test Patterns의 저자인 제라드 메스자로스(Gerard Meszaros)가 만든 용어로 테스트를 진행하기 어려운 경우 이를 대신해 테스트를 진행할 수 있도록 만들어주는 객체를 말한다. ex) DB로 부터 조회한 값을 연산하는 로직을 구현했다고 치자. 로직을 실행하기 위해선 항상 DB를 참조하기 때문에 DB상태에 따라서 결과가 달라질 수 있다. 종류 Fake Stub Mock Dummy Spy Test Double - None product code public class ControlCenter { private readonly Car car; public ControlCenter(Car car) { this.car = car; } publi..

프로그래밍 2023.12.13

정규 표현식 변환 시 유용한 사이트

정규 표현식은 특정 패턴을 표현하는데 사용되며, 텍스트 처리, 검색, 추출, 치환 등 다양한 작업에 유용합니다. 정규 표현식(Regular Expression)을 작성하고 테스트하는 데 도움이 될만한 사이트입니다. 사용자가 정규 표현식을 만들고 테스트할 수 있는 편리한 환경을 제공합니다. 사이트를 방문하면 정규 표현식을 입력할 수 있는 창이 나타나며, 입력한 표현식이 문자열과 어떻게 매칭되는지 실시간으로 확인할 수 있습니다. 또한, 여러 옵션과 예제를 제공하여 사용자가 정규 표현식을 더욱 쉽게 이해하고 활용할 수 있도록 도와줍니다. 사이트 링크 : https://regexr.com/

프로그래밍 2023.11.17

[클린코드] 10,11장 정리

강결합 코드를 의존성 주입 기법(DI)을 사용하여 결합도를 낮춰보는 예제이다. CollectDataActor가 DeleteFileService에 의존성을 가지고 있다. 이로인해서 CollectDataActor클래스는 DeleteFileService클래스에 강하게 결합되어 있고, 테스트나 변경사항에 취약할 수 있다. public class CollectDataService { private readonly DeleteFileService _deleteFileService; public CollectDataService(...) { _deleteFileService = new DeleteFileService(); } public List CollectDatas(CollectRecipe collectRecip..

프로그래밍 2023.11.01

[클린코드] 11장 시스템

시스템 시스템 생성과 사용은 분리하라 의존성 주입 의존성 주입(DI)는 제어 역전(IoC)기법을 의존성 관리에 적용한 메커니즘 제어 역전에서는 한 객체가 맡은 보조 책임을 새로운 객체에게 전적으로 넘긴다. 특수 컨테이너(DI 컨테이너)를 사용할 수 있다. DI컨테이너는 필요한 객체의 인스턴스를 만든 후 생성자 인수나 설정 메서드를 사용해 의존성을 설정한다.

프로그래밍 2023.10.29

[클린코드] 10장 클래스

클래스 캡슐화 같은 패키지 안에서 테스트 코드가 함수를 호출하거나 변수를 사용해야 한다면, 함수, 변수를 protected로 선언하거나 패키지 전체로 공개한다. 클래스는 작아야한다. 클래스는 얼마나 작아야하는가? SRP(Single Responsibility Principle)원칙에 따를만큼 작아야한다. SRP란 단일책임원칙이라 하며, `하나의 클래스는 하나의 기능 담당하여 하나의 책임을 수행하는데 집중되어야 있어야 한다`는 원칙 시스템은 개발기간이 늘어날수록 논리가 많아지고, 복잡성이 증가한다. 복잡한 시스템을 다루려면, 체계적으로 정리가 돼야한다. 만능클래스 한개보다, 작은클래스(SRP원칙에 따른 클래스) 여러개로 이뤄진 시스템이 바람직하다. 응집도 응집도가 높다: 클래스에 속한 메서드와 변수가 서로..

프로그래밍 2023.10.29

[클린코드] 6,7장 정리

자료구조 vs 객체 객체는 추상화 뒤로 자료를 숨기고, 자료를 다루는 함수만 공개한다. 자료구조는 자료를 그대로 공개하고, 함수는 다루지 않는다. 새로운 자료 타입이 필요한 경우, 객체가 적합하다. 새로운 함수가 필요한 경우, 절차적인 코드와 자료 구조가 적합하다. 추상화 변수를 private으로 선언하더라도 조회함수(get), 설정함수(set)을 제공한다면 구현을 외부로 노출시키는 셈이다. 구현을 감추려면 추상화가 필요하다. 사용자가 구현을 모르는 상태로 자료를 조작할 수 있어야한다. 아래 코드는 개인적으로 추상화가 잘됐다고 생각한 코드 부분이다. python 모델 판정을 위한 인터페이스와 구현체 클래스이다. 아래와 같은 코드는 다른 모델과의 교체 및 확장이 쉬워지며 코드의 유지 보수가 용이해진다고 생..

프로그래밍 2023.10.18

[클린코드] 7장 오류 처리

7장 오류처리 오류 코드보다 예외처리 함수를 호출한 즉시 오류를 확인하는 경우 코드가 복잡해진다. Try-Catch-Finally문 부터 작성하라 try블록에 들어가는 코드를 실행하면 어느 시점에서든 실행이 중단된 후 catch블록으로 넘어갈 수 있다. 예외에 의미를 제공하라 오류 메시지에 정보를 담아 예외와 함께 던진다면, 실패한 원인을 쉽게 파악할 수 있다. 호출자를 고려해 예외 클래스를 정의하라 호출하는 라이브러리 API를 감싸면 예외 유형 하나를 반환하면 된다. API를 감싸면 의존성이 줄어든다. null을 반환,전달하지 마라 null을 반환하는 코드는 일거리가 많아지고, 호출자에게 문제를 떠넘기게 된다. null확인 코드가 많아진다. null로 인한 오류가 발생할 수 있다. 정상적으로 null ..

프로그래밍 2023.10.15

[클린코드] 6장 객체와 자료구조

6장 객체와 자료 구조 자료 추상화 인터페이스는 자료구조를 명백하게 표현한다. 변수를 private으로 선언하더라도 조회함수(get), 설정함수(set)을 제공한다면 구현을 외부로 노출시키는 셈이다. 구현을 감추려면 추상화가 필요하다. 추상 인터페이스를 제공해 사용자가 구현을 몰른 채 자료를 조작할 수 있어야, 진정한 의미의 클래스이다. 자료/객체 비대칭 객체는 추상화 뒤로 자료를 숨기고, 자료를 다루는 함수만 공개한다. 자료구조는 자료를 그대로 공개하고, 함수는 다루지 않는다. 새로운 자료 타입이 필요한 경우, 클래스와 객체 지향 기법이 적합하다. 새로운 함수가 필요한 경우, 절차적인 코드와 자료 구조가 적합하다. 디미터 법칙 디미터 법칙이란, 모듈은 자신이 조작하는 객체의 속사정을 몰라야한다는 법칙기..

프로그래밍 2023.10.15

[C#] 게터,세터,프로퍼티

게터(Getter), 세터(Setter), 그리고 프로퍼티(Property)은 C#에서 데이터 캡슐화 및 정보 은폐를 지원하는 중요한 개념입니다. 이들은 클래스 내의 멤버 변수(필드)를 조작하고 접근하는 방법을 제어하는 데 사용됩니다. 게터(Getter): 게터는 클래스 내의 프라이빗 필드(private field)의 값을 읽어오는 역할을 합니다. 게터 메서드는 "get" 키워드를 사용하여 정의하며 값을 반환하는 코드 블록으로 이루어집니다. 게터를 사용하여 외부 코드에서 필드 값을 읽을 수 있습니다. private int myField; public int GetMyField() { return myField; } 세터(Setter): 세터는 클래스 내의 프라이빗 필드의 값을 변경하는 역할을 합니다. 세..

프로그래밍/C# 2023.10.15