PART 1-1 상식 키우기

색인

좋은 코드란?

좋은 코드 작성을 위한 시사점

– 나쁜 코드 줄이기

좋은 코드는 좋은 코드를 쓰려고 노력하는 대신 나쁜 코드를 줄이는 나쁜 코드가 없는 코드입니다.

– 일관된 코드 작성

최소한의 가독성을 보장하는 방법은 일관된 코드를 작성하는 것입니다. 코드가 일관되면 어떤 코드가 어디로 가는지 예측할 수 있습니다.

– 복잡한 요구 사항이 있는 코드를 주석으로 분리

코드를 작성하다 보면 읽기 어렵고, 지우기 어렵고, 변경에 융통성이 없는 복잡한 요구 사항으로 코드를 작성하고, 별도로 관리할 수 있도록 격리가 필요한 경우가 있습니다. 이 경우 주석으로 격리하면 기존 코드의 흐름을 끊지 않고 복잡한 코드를 이해하는 데 도움이 될 수 있습니다.

– 확장 가능한 코드 작성

확장 가능한 코드는 기존 논리에 새로운 값이 추가되거나 삭제되어도 내부적으로 변경되지 않는 코드를 말합니다. 확장하기 어려운 코드는 코드를 읽기 어렵게 만들고 생산성을 저하시키는 많은 내부 변경 사항이 있습니다. 확장성을 고려하여 코드를 설계하십시오.

객체 지향 프로그래밍

객체지향 프로그래밍은 인간이 중심이기 때문에 실세계를 프로그래밍으로 옮겨가는 프로그래밍을 말한다.

실세계의 객체를 객체로 보고 객체에서 응용 프로그램을 개발하는 데 필요한 기능을 추출하고 프로그래밍하는 것입니다.

oop의 장점

– oop로 코드를 작성할 때 코드 재사용성이 높다.

일반적으로 사용되는 로직을 라이브러리에 통합하여 재사용하면 라이브러리에서 제공하는 기능을 사용하여 생산성이 향상되고 라이브러리를 다양한 상황에 적합하게 만들면 컴파일 단계에서 오류를 포착하여 오류 발생을 줄일 수 있습니다.

– 코드를 객체로 나누어 작성하기 때문에 디버깅이 쉽고 유지보수가 용이합니다.

– 데이터 모델링(모든 개체 및 서로 간의 관계 식별)에서 개체를 쉽게 연결하여 요구 사항을 명확하게 식별하고 프로그래밍할 수 있습니다.

oop의 단점

– 객체 간의 모든 정보 교환은 메시지 교환을 통해 이루어지므로 시스템에 많은 오버헤드가 발생합니다. 이 부분의 상당 부분은 하드웨어의 발전으로 뒷받침되었다.

– 객체지향 프로그래밍은 “객체에는 상태가 있다”는 특징이 있으며, 변수가 존재하고 객체는 그 변수를 통해 예측할 수 없는 상태를 갖게 되어 응용 프로그램 내에서 오류가 발생합니다.

객체 지향 설계 원칙

SRP(단일 책임 원칙): 단일 책임 원칙

클래스는 하나의 책임만 가져야 하며 클래스를 변경하는 이유는 하나여야 합니다.

OCP(Open-Closed Principle): 개방-폐쇄 원칙

확장에 개방적이고 변경에 폐쇄적이어야 합니다.

LSP(Liskov 치환 원리): Liskov 치환 원리

슈퍼 타입의 객체가 서브 타입의 객체로 대체되더라도 슈퍼 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.

ISP(Interface Segregation Principle): 인터페이스 분리의 원리

인터페이스는 이를 사용하는 클라이언트에 따라 구분되어야 합니다.

DIP(Dependency Inversion Principle): 종속성 역전 원리

고수준 모듈은 저수준 모듈의 구현에 의존해서는 안 됩니다.

RESTful API

침묵이란 무엇인가내 아키텍처에서 리소스는 API 설계의 핵심이며 HTTP 메서드를 통해 리소스를 처리하도록 설계되었습니다. REST의 핵심 원칙에 충실한 서비스 디자인을 RESTful이라고 할 수 있습니다.

RESTful 방식으로 API 설계

– 리소스와 작업의 명시적이고 직관적인 분리.

자원은 “URI”로 표현되어야 하며 그것이 참조하는 것은 “명사”로 표현되어야 합니다.동작은 “HTTP 방식”으로 표현되며 GET(검색)/POST(생성)/PUT(기존 엔터티 전체 변경)/PATCH(기존 엔터티의 일부 변경)/DELETE(삭제)는 명확한 목적을 위해 사용됩니다.

– 메시지는 헤더와 본문을 명확하게 구분합니다.

엔터티 정보는 본문에 포함됩니다. 응답을 받기 위한 API 버전 정보와 MIME 타입이 헤더에 포함되어 있습니다.

– API 버전을 관리합니다.

특정 API를 변경할 때 이전 버전과의 호환성이 보장되어야 합니다.

– 서버와 클라이언트가 동일한 방법을 사용하여 요청하는지 확인하십시오.

둘 다 json 형식 또는 양식 데이터 형식으로 전송되어 하나로 통합됩니다. URI는 플랫폼 중립적이어야 합니다.

RESTful API의 이점

– 개방형 API의 손쉬운 배포.

– 멀티플랫폼 지원 및 상호운용이 용이합니다.

– 원하는 종류의 데이터를 주고 받을 수 있습니다.

– 기존 웹 인프라(HTTP)를 그대로 사용 가능

RESTful API의 단점

– 사용 가능한 방법이 제한되어 있습니다.
– 분산 환경에는 적합하지 않습니다.
– HTTP 통신 모델만 지원합니다.

TDD

테스트 주도 개발(TDD)은 매우 짧은 개발 주기의 반복에 의존하는 소프트웨어 개발 프로세스입니다.개발자는 새로운 기능에 대한 자동화된 테스트 사례를 작성한 다음 해당 테스트를 통과하는 간단한 코드를 작성합니다.

테스팅이 테스트를 통과한 코드를 작성하고 상황에 따라 리팩토링 과정을 거쳐 코드 작성을 가이드하는 개발 방법론이다.

함수형 프로그래밍

함수형 프로그래밍에는 불변 데이터와 일급 시민이라는 두 가지 주요 특성이 있습니다.

불변 데이터

불변 데이터 객체는 값을 변경할 수 없는 객체를 의미합니다. 값이 변경되면 새로운 객체를 생성하고 변경된 값을 주입하여 반환해야 합니다.

일급 시민

함수형 프로그래밍 패러다임을 따르는 언어의 함수는 일급 시민으로 간주됩니다.

– 함수를 변수나 데이터 구조에 넣어 함수 매개변수로 전달하여 함수 반환 값으로 사용할 수 있습니다.

– 매핑에 사용된 이름과 상관없이 고유한 식별이 가능합니다.

– 함수는 리터럴로 직접 정의할 수 있습니다(익명 함수로 정의할 수 있음).

리액티브 프로그래밍

선언적 프로그래밍이라고도 하는 리액티브 프로그래밍은 명령형 프로그래밍의 반대입니다.

또한 함수형 프로그래밍 패러다임을 사용하는 것을 의미합니다. 기본적으로 모든 것이 스트림으로 간주됩니다.

스트림은 “값의 집합”으로 볼 수 있으며 데이터는 제공된 기능적 메서드를 통해 불변적으로 관리할 수 있습니다.

MVC 패턴


MVC 패턴

Model-View-Controller는 사용자 인터페이스, 데이터 및 논리적 컨트롤을 구현하는 데 사용되는 소프트웨어 디자인 패턴입니다.

제어 장치

모델과 뷰의 연결을 나타내며, 클라이언트로부터 요청이 들어오면 해당 요청에 대해 실제 작업을 수행하는 모델이 호출됩니다. 클라이언트에서 데이터를 보내면 데이터를 처리하여 단순히 모델에 전달합니다. 모델이 작업을 마치면 결과를 뷰에 제출합니다.

모델

컨트롤러에 의해 호출되면 요청에 적합한 역할을 수행합니다. 응용 프로그램에서 비즈니스 로직을 구현하고 데이터를 처리하는 영역입니다.

보다

컨트롤러로부터 받은 모델의 결과 값으로 사용자에게 제시되는 화면을 생성하는 사용자 인터페이스(사용자에게 보이는 부분)를 의미합니다.

힘내와 GitHub

힘내

Git은 버전 관리 시스템 중 하나입니다.

비선형 개발을 위해 분기 시스템을 도입했으며 원격 저장소와 로컬 저장소를 분리하여 여러 개발자의 분산 작업이 용이하도록 설계했습니다.

Gitflow 대 GitHub 흐름 대 GitLab 흐름

Git 사용을 위한 3가지 분기 전략

자식 흐름

워크플로우 방식 중 최초로 제안된 방식으로 대규모 프로젝트 관리에 적합한 방식으로 평가되고 있다.

GitHub 흐름

Git 흐름을 개선하는 방법이며 흐름과 역할은 간단합니다.

GitLab 흐름

github-flow의 단순 배포 문제를 보장하기 위해 관련 콘텐츠를 추가로 추가한 흐름 방식입니다.

GitHub

Github는 버전 제어 및 소스 코드 공유를 허용하는 원격 저장소입니다.

참조

https://github.com/JaeYeopHan/Interview_Question_for_Beginner