분류 전체보기 212

[클린코드] 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

[Python] csv파일 읽은 후 list생성하기

python에서 csv파일을 읽은 후 list생성해봅시다csv 파일 내용csv 읽은 후 리스트 생성 및 특정 값을 출력해봅시다. csv파일 label class 0 100 1 101 2 102 3 103 4 104 0 200 1 201 2 202 3 203 4 204 5 205 6 206 7 207 8 208 9 209 10 210data type 정의 후 2번째 값 출력 import csv class DataEntry: def __init__(self, step_oh_name, step_oh, gt_name, gt_label, class_id): self.step_oh_name = step_oh_name self.step_oh = step_oh self.gt_name = gt_name self.gt_l..

[Windows] 특정 포트 사용중인 프로세스 죽이기

Windows에서 특정 포트를 사용 중인 프로세스를 종료하는 명령어를 실행하려면 다음 단계를 따를 수 있습니다. 특정 포트 사용 중인 프로세스 확인: 먼저 특정 포트를 사용 중인 프로세스를 확인해야 합니다. 이를 확인하기 위해 다음 명령어를 사용합니다. netstat -ano | findstr :포트번호여기서 "포트번호"에는 종료하려는 포트 번호를 입력하십시오. 예를 들어 포트 80을 종료하려면 다음과 같이 입력할 수 있습니다. netstat -ano | findstr :80이 명령어는 해당 포트를 사용 중인 프로세스의 PID (Process ID)를 나열합니다. PID를 사용하여 프로세스 종료: 확인한 PID를 사용하여 프로세스를 종료할 수 있습니다. 다음 명령어를 사용합니다. taskkill /F /..

Windows 2023.09.18

[RabbitMQ] 스트림

RabbitMQ Stream https://github.com/rabbitmq/rabbitmq-stream-dotnet-client docs : https://rabbitmq.github.io/rabbitmq-stream-dotnet-client/stable/htmlsingle/index.html RabbitMQ Stream .Net Client는 RabbitMQ Stream Plugin과 통신하기 위한 .Net 라이브러리입니다. Stream 장점 Large fan-outs 여러 애플리케이션이 동일한 메시지를 읽어야 할 때 유용합니다. 기존의 큐를 사용하면 각 애플리케이션마다 큐를 선언하고 각각에게 동일한 메시지의 복사본을 전달해야 합니다. Stream은 여러 소비자가 동일한 큐에서 동일한 메시지를 비파..