728x90

TIL 259

24.08.23 CS

CSSRP(단일 책임 원칙)단일 책임 원칙은 객체는 단 하나의 책임만 가져야 한다는 원칙을 말한다. 여기서 책임이라는 의미는 하나의 기능 담당으로 보면 된다. 즉, 하나의 클래스는 하나의 기능만을 담당하여 하나의 책임을 수행하는데 집중되어 있어야 한다는 의미이다.하나의 클래스에 여러 기능(책임)을 넣느냐, 따로따로 클래스를 분리하여 기능(책임)을 분산시키느냐 설계는 프로그램의 유지보수와 밀접한 관련이 있다.단일 책임 원칙 준수 유무에 따른 가장 큰 특징 기준 척도는, 기능 변경(수정)이 일어났을때의 파급 효과이다.한 객체에 책임이 많아질수록 클래스 내부에서 서로 다른 역할을 수행하는 코드끼리 강하게 결합될 가능성이 높아지게 되어 시스템이 복잡해질 수 있다. 그래서 그 객체가 하는 기능에 변경사항이 생기면..

24.08.22 CS, C++

CS상속과 합성프로그래밍을 할 때 가장 신경 써야 할 것 중 하나가 바로 코드 중복을 제거하여 재사용 함으로써 변경, 확장을 용이하게 만드는 것이다.상속과 합성은 객체지향 프로그램에서 가장 널리 사용되는 코드 재사용 기법이다.상속(Inheritance) 합성(Composition)부모 클래스와 자식 클래스 사이의 의존성은 컴파일 타임에 해결두 객체 사이의 의존성은 런타임에 해결is-a 관계has-a 관계부모 클래스의 구현에 의존 결합도가 높다구현에 의존하지 않는다.내부에 포함되는 객체의 구현이 아닌 인터페이스에 의존한다. 클래스 사이의 정적인 관계객체 사이의 동적인 관계부모 클래스 안에 구현된 코드 자체를 물려 받아 재사용포함되는 객체의 퍼블릭 인터페이스를 재사용상속(Inheritance) 이란상속은 객..

24.08.21 CS

CS객체의 결합도 & 응집도소프트웨어의 모듈 독립성프로그래밍이란 문제를 정의하고 하나씩 해결해나가는 과정을 말한다. 문제가 복잡하고 큰 문제라면, 일반적으로 문제를 작은 부분으로 쪼개어서 하나씩 풀어나가게 될 것인데, 이 떄 문제를 작은 부분으로 쪼개나가는 것을 모듈화라고 한다.모듈은 소프트웨어를 각 기능별로 나누어진 소스 단위를 말한다. 독립적으로 컴파일 가능한 프로그램 혹은 하나의 함수나 클래스도 모듈이 된다.보통 좋은 소프트웨어 일수록 모듈의 독립성이 높다고 한다. 좋은 모듈화는 목적에 맞는 기능만으로 모듈을 나누게 되는데, 각각의 모듈은 주어진 기능만을 독립적으로 수행하기 때문에 재사용성이 높고 코드의 이해/수정이 용이하기 때문이다. 예를 들어 해당 모듈을 수정하더라도 다른 모듈에 끼치는 영향이 ..

24.08.20 CS, 디자인 패턴

CS객체 지향(OOP)객체 지향 프로그래밍 이란, 많은 객체(Object)들이 모여서 상호 협력하면서 데이터를 처리하는 방식의 프로그래밍 설계 방법을 말한다.프로그램을 묶음 단위로 잘게 쪼개서, 추후에 가져다 쓰기 편하게 만들어 놓은 프로그램 방식이다. 이처럼 레고 블럭을 조립하듯 컴포넌트를 유연하고 변경이 용이하기 때문에, 현업에서 대규모 소프트웨어 개발에 많이 사용된다.대표적으로 많이 알려진 Java언어를 포함하여 Ruby Python, C++, Objective-C, C#, Kotlin등이 모두 객체지향 요소를 가진 언어이다.객체 지향 프로그래밍의 반대 개념으로는, 절차적 프로그래밍(Procedure Programming) 이라는 것이 있다. 함수(function)을 이용해서 정리 정돈하는 프로그래..

24.08.19 네트워크

네트워크FTP/ SFTPFTP(File Transfer Protocol)파일을 전송하는 통신 규약이다.원격에 있는 서버에 파일을 주고 받을 때 사용하는 인터넷 통신 규약인데 내 컴퓨터에 있는 파일을 계정을 제공하는 서버로 파일을 서로 이동시키는 것을 말한다. 여기에 보안이 추가된 SFTP가 있다.기본 포트는 21이지만 바꿔서 사용하는 경우도 있다. 예전에는 사용했지만 지금은 보안이 좋지 않아서 실무에서는 사용하지 않는다.SFTPssh의 파일 전송 버전이라고 생각하면 된다.일반적인 FTP와 달리 PC와 서버간의 데이터 전송을 암호화하기 때문에 해킹이나 보안상의 문제점을 방지, 안전한 호스팅 서비스를 이용할 수 있다.텔넷(Telecommunication network)인터넷을 통하여 원격지의 호스트 컴퓨터에..

24.08.16 CS, C#, DEV

C#Async/AwaitC#에서 비동기 프로그래밍을 쉽게 할 수 있게 해주는 키워드이다. 이 두 키워드는 복잡한 비동기 코드를 간결하게 작성할 수 있게 해주며, 동기 코드처럼 읽기 쉽고 유지 보수하기 좋은 코드를 작성할 수 있게 도와준다.asyncasync 키워드는 메서드, 람다식, 또는 익명 메서드에 사용된다.이 키워드는 해당 메서드가 비동기적으로 실행될 것임을 컴파일러에게 알려준다.async 메서드는 반드시 await 키워드를 포함하지 않아도 되지만, 포함하는 것이 일반적이다.awaitawait는 비동기 작업이 완료될 때까지 메서드의 실행을 일시 중지하고, 작업이 완료되면 계속 실행한다.await 키워드는 비동기 작업이 끝날 대까지 호출된 메서드를 기다렸다가, 그 이후의 코드를 계속 실행한다.중요한 ..

24.08.13 CS, C#

24.08.13 CS, C#CSAuthentication/Authorization보통 우리가 권한이라고 불리우는 것엔 인증(Authentication)과 인가/승인(Authorization) 두 가지 단어가 존재하는데, 비슷해보이지만 엄연한 차이가 존재한다.인증(Authentication)본인이 누구인지 확인 (로그인)승인(Authorization)특정 리소스에 권한이 있는지 확인 (등급 권한)인증 (Authentication) 인가(Authorization)기능자격 증명 확인권한 허가/거부진행 방식비밀번호, 생체인식, 일회용 핀보안 팀에서 관리하는 설정사용자가 볼 수 있는가?예아니요사용자가 직접 변경할 수 있는가?부분적으로 가능불가능데이터 전송ID 토큰 사용액세스 토큰 사용참조https://inpa.t..

24.08.12 CS, C#

24.08.12 CS, C#CS컴파일/트랜스파일/인터프리터컴파일(Compile)한 언어로 작성된 소스 코드를 다른 언어로 변환하는 것이 컴파일이다.C언어를 기계어로 옮기는 것, Java를 Bytecode로 옮기는 것 모두 이 정의에 따르면 Compile에 해당한다. 심지어 TypeScript를 JavaScript로 옮기는 것 역시 이 범주안에 속한다고 할 수 있기도 하다. (엄밀히 말하면 트랜스파일링이다.)고수준의 언어를 바이트 단위의 기계어로 변환해야 컴파일이라고 말하는 것이 아니다. 컴파일은 한 언어로 작성된 코드를 다른 언어로 옮기는 일 자체를 통칭한다고 보면 된다.트랜스파일(Transpile)한 언어로 작성된 소스 코드를 비슷한 수준의 추상화를 가진 다른 언어로 변환하는 것이 트랜스파일이다.Tra..

24.08.09 C#,DEV

C#ProtobufgRPC는 IDL(Interface Design Language)로 Protobuf를 사용한다. Protobuf IDL은 gRPC 서비스에서 보내고 받는 메시지를 지정하기 위한 언어 중립적인 형식이다. Protobuf 메시지는 파일에 정의 .proto 된다.Protobuf 메시지메시지는 Protobuf의 기본 데이터 전송 개체이다. 개념상 .NET 클래스와 유사하다.syntax = "proto3";option csharp_namespace = "Contoso.Messages";message Person { int32 id = 1; string first_name = 2; string last_name = 3;}위의 메시지 정의는 세 필드를 이름-값 쌍으로 지정한다. .N..

24.08.08 Dev, C#

24.08.08 Dev, C#DevCI/CD 파이프라인CI(Continuous Integration)CI/CD의 CI는 개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration)을 의미한다.CI를 성공적으로 구현할 경우 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합되므로, 여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결할 수 있다.CD(Continuous Delivery / Deployment)CI/CD의 CD는 지속적인 서비스 제공(Continuous Delivery) 및 지속적인 배포(Continuous Deployment)를 의미하며 이 두 용어는 상호 교환..

728x90