본문 바로가기

728x90
반응형

프로그래밍&IT

(155)
[클린 아키텍처] 1) 설계와 아키텍처, 개발 패러다임 (구조적, 객체지향, 함수형) 아키텍처는 시스템을 구체화하는 중요한 설계 결정을 표현하며, 그 결정의 중요도는 변경에 드는 비용으로 측정 - 그레디 부치아키텍처란 프로젝트 초기에 제대로 정할 수 있기를 바라는 결정사항이지만, 제대로 정할 가능성이 그 외 사항들보다 반드시 더 높지는 않다 - 랄프 존슨 프로그램을 동작하도록 만드는 것과 제대로 만드는 것은 전혀 다르다. 1장. 설계와 아키텍처란?"아키텍처"는 저수준의 세부사항과는 분리된 고수준의 무언가를 가리킬 때 흔히 사용되고 "설계"는 저수준의 구조 또는 결정사항 등을 의미할 때가 많으나 아키텍트가 실제로 하는 일을 살펴보면 이런 구분은 무의미.목표 : 필요한 시스템을 만들고 유지보수하는데 투입되는 인력을 최소화하는데 있다.빨리 가는 유일한 방법은 제대로 가는 것. 좋은 S/W 아키..
[클린 코드] 7. 동시성, 개선, 휴리스틱 Ch13. 동시성객체는 처리의 추상화, 스레드는 일정의 추상화 - 제임스 O 코플리엔 동시성과 깔끔한 코도는 양립하기 어렵다.이 장에선 여러 스레드를 동시에 돌리는 이유를 논한다.동시성은 결합 (coupling)을 없애는 전략. what과 when을 분리하는 전략.동시성은 다소 부하를 유발 / 복잡 / 동시성 버그는 재현하기 어렵다.구현하려면 근본적인 설계 전략을 재고해야 한다.동시성 방어 원칙* 단일 책임 원칙 (Single Resp0onsibility Principle, SRP) : 주어진 메서드/클래스/컴포넌트를 변경할 이유는 하나여야 한다 > 동시성은 복잡성 하나만으로도 분리할 이유가 충분동시성 코드는 독자적인 개발, 변경, 조율주기가 있다.독자적인 난관이 있으며 다른 코드에서 겪는 난관과 다르며..
[클린 코드] 6. 창발성 Ch12. 창발성켄트 벡이 제시한 단순한 설계규칙 4가지1  모든 테스트를 실행한다.2. 중복을 없앤다.3. 프로그래머 의도를 표현한다.4. 클래스와 메서드 수를 최소로 줄인다. 결합도가 높으면 테스트 케이스 작성이 어렵다. 낮은 결합도와 높은 응집력이라는  목표를 저절로 달성한다.좋은 이름을 선택한다.함수, 클래스 크기를 가능한 줄인다.표준명칭을 사용한다.단위 테스트 케이스를 작성한다. Template method 패턴? 고차원 중복을 제거할 목적으로 자주 사용하는 기법.디자인 패턴 중 하나로, 행위(Behavioral) 패턴에 속한다.알고리즘의 구조를 정의하면서도 특정 단계의 구현을 서브클래스에 위임하는 방식으로 작동한다.기본적인 처리 흐름(템플릿)을 정의하고, 그 중 일부를 자식 클래스에서 구현할 ..
[클린 코드] 5. 시스템 Ch11. 시스템레이 오지 (MS CTO) "복잡성은 죽음. 개발자에게서 생기를 앗아가며, 제품을 계획하고 제작하고 테스트하기 어렵게 만든다" 시스템 제작(construction) 과 사용(use) 을 분리하라S/W 시스템은 준비 과정 (app 객체 제작, 의존성 연결 등) 과 그 이후의 런타임 로직을 분리해야 한다관심사 분리는 오래되고 중요한 설계 기법 중 하나. 대다수 app은 시작단계라는 관심사를 분리하지 않는다.Factory: 때론 객체가 생성되는 시점을 app이 결정할 필요도 생긴다.의존성 주입 : 사용과 제작을 분리하는 강력한 메커니즘 중 하나확장의사결정을 최적화 : 모듈을 나누고 관심사를 분리하면 지엽적인 관리, 결정이 가능해진다시스템은 도메인 특화 언어 (Domain-Specific Lan..
[클린 코드] 5. 오류처리, 경계, 단위테스트 ch7. 오류처리깨끗한 코드와 오류 처리는 연관성있다. 상당수 코드기반은 전적으로 오류 처리 코드에 좌우된다.오류처리가 중요하지만 프로그램 논리를 이해하기 어려워진다면 Clean Code라 부르기 어렵다. 오류코드보다 예외를 사용하라.Try-Catch-Finally 문부터 작성하라미확인 (unchecked) 예외를 사용하라호출자를 고려해 예외 클래스를 정의한다.정상 흐름을 정의. 비즈니스 논리와 오류 처리가 잘 분리된 코드null 반환하지 마라. 호출자에게 문제를 떠넘기게 된다 > 예외를 던지거나 특수 사례 객체를 반환한다또한 null을 전달하지 마라. 정상적인 인수로 null을 기대하는 API가 아니라면.결론깨끗한 코드는 읽기도 좋아야 하지만 안정성도 높아야. 이 둘은 상충하는 목표가 아니다미확인 (u..
[클린 코드] 4. 객체와 자료구조 Ch6. 객체와 자료구조변수를 private (비공개)로 정의하는 이유? 남들이 변수에 의존하지 않게 만들고 싶어서.하지만 왜 get / set 함수를 당연히 공개 (public)해서 외부에 노출할까? 자료추상화자료를 세세히 공개하기보단 추상적인 개념으로 표현하는 편이 좋다.인터페이스, get/set 함수만으로 추상화가 이뤄지지 않는다.자료/객체 비대칭변수사이에 함수라는 계층을 넣는다고 구현이 저절로 감춰지지 않으며 구현을 감추려면 추상화가 필요하다추상인터페이스를 제공해 사용자가 구현을 모른채 자료 핵심을 조작할 수 있어야 진정한 의미의 클래스아무 생각없이 get/set 추가는 나쁘다// 구체적인 Vehicle 클래스public interface Vehicle { double GetFuelTankCapa..
인공지능 개념 : AGI , ASI 등 이번에 신문기사를 보다가, 샘 알트먼 OpenAI CEO가 AGI , ASI를 언급했는데 조회 해봤다.AGI, ASI 그리고 기타 인공지능 개념1. ANI (Artificial Narrow Intelligence, 좁은 인공지능)특정 작업이나 영역에 특화된 인공지능.현재 대부분의 인공지능 시스템이 해당하며, 특정 문제를 잘 해결하지만 일반적인 사고 능력은 없음.ex) 챗봇, 음성 인식 시스템(시리, 알렉사), 이미지 분류 알고리즘.2. AGI (Artificial General Intelligence, 범용 인공지능)사람 수준의 지능을 갖춘 인공지능으로, 다양한 작업에서 사람처럼 사고하고 학습할 수 있는 능력을 의미.특정한 문제에 국한되지 않고, 학습 능력과 적응력이 높음.샘 알트먼은 AGI를 OpenA..
NamedPipe 사용해서 Process간에 데이터 전송 프로세스 간에 NamedPipeServerStream와 NamedPipeClientStream 를 이용해서 Process (프로그램) 간에 데이터 전송구조winform기반Sender와 Receiver 2개의 프로그램 작성Receiver 프로그램NamedPipeServerStream 사용한다.Sender (Client) 로부터 특정 메세지를 받으면 뭔가 작업을 하는게 목적 (여기선 단순히 "A"라 한다)처음 시작할때, 작동을 하며Start & Stop 버튼을 만들어 작동을 제어 한다.using System;using System.IO;using System.IO.Pipes;using System.Threading.Tasks;using System.Windows.Forms;namespace Receiver{..
[클린 코드] 3. 함수 / 주석 / 형식 맞추기 3. 함수첫번째 규칙은 작게, 두번째 규칙은 더 작게함수에서 들여쓰기 수준은 1,2단 내로1가지만 한다. 함수당 추상화 수준은 하나로위에서 아래로 코드를 읽기 좋도록서술적인 이름을 사용한다. 일관성이 있어야 한다 (모듈 내에서는 같은 문구, 명사, 동사를 쓴다)함수 인수는 되도록 줄인다. 많이 쓰는 단항식: 1. 인수질문던지기- FileExists("a.txt") 2. 인수 변환 결과 InputStream FileOpen("a.txt")명령과 조회를 분리하라오류코드보단 예외를 사용하라반복하지마라코딩은 글짓기와 비슷하다. 생각을 기록 후 읽기좋게 다듬는다 4. 주석나쁜 코드에 주석을 달지말고 새로 짜라 - 브라이언 W. 카니핸, P.J 플라우거경솔하고 근거없는 주석은 코드를 이해하기 어렵게 만든다부정확한 ..
[PostgreSQL] Insert 쿼리의 모든 사용법 PostgreSQL의 Insert 쿼리들1. 기본 INSERT 쿼리특정 컬럼에 값을 지정하여 데이터 삽입 (기본인거라)INSERT INTO table_name (column1, column2, column3) VALUES (value1, value2, value3);2. INSERT INTO SELECT 쿼리다른 테이블에서 데이터를 가져와 삽입INSERT INTO table_name (column1, column2, column3)SELECT column_a, column_b, column_c FROM another_tableWHERE condition; -- 여기서부터 좀 다른것들이 나오는듯3. DEFAULT 값을 사용한 INSERT모든 컬럼이 기본값을 가지는 경우 DEFAULT를 사용할 수 있음: I..

반응형