티스토리 뷰

CS

Development Common Sense

lemonade99 2023. 3. 16. 18:01

목차

좋은 코드란 무엇인가

 

좋은 코드를 작성하기 위한 결론

 

- 좋지 않은 코드를 줄이자

좋은 코드란 좋지 않은 코드가 없는 코드로 좋은 코드를 작성하려 노력하는 것 보단 좋지 않은 코드를 줄여본다.

 

- 일관성 있는 코드를 작성하자

최소한의 가독성을 보장하는 방법은 일관성 있는 코드를 작성하는 것이다. 코드에 일관성이 지켜지면 어느 곳에 어떤 코드가 위치하는지 예상할 수 있다.

 

- 복잡한 요구사항을 담고있는 코드는 주석과 함께 분리하자

코드를 작성하다보면 복잡한 요구사항을 담고있는 코드가 작성될때가 있다.이런 코드는 읽기도 어렵도 삭제하기도 어려워변경에 유연하지 못하기에 별도로 분리해 관리할수 있도록 격리해야 한다. 이 경우엔 주석과 함께 격리해두면 기존 코드의 흐름을 끊기지 않고 복잡한 코드를 이해하는데 도움을 줄 수 있다.

 

- 확장성 있는 코드를 작성하자

확장성이 있는 코드란 기존 로직에 새로운 값들이 추가, 삭제될 때 내부적으로 변경이 적은 코드를 말한다. 확장이 어려운 코드는 내부에 많은 변경이 발생해 코드를 읽기 어렵게 만든고 생산성도 떨어뜨린다. 적절하게 확장성을 고려해 코드를 설계해본다.

 

Object Oriented Programming

객체지향 프로그래밍이란 중심이 인간에 있어 현실 세계를 프로그래밍으로 옮겨와 프로그래밍을 하는 것을 말한다.

현실 세계의 사물을 객체라 보고 , 그 객체로부터 개발하고자 하는 애플리케이션에 필요한 특징들을 뽑아와 프로그래밍하는 것이다.

 

oop의 장점

- oop로 코드를 작성하면 코드의 재사용성이 높다.

자주 사용하는 로직을 라이브러리로 만들어 계속 사용해 라이브러리에서 제공하는 기능들을 사용해 생산성이 높아지고 , 라이브러리를 각종 상황에 맞게 만들어두면 에러를 컴파일 단계에서 잡아낼 수 있어 버그 발생이 줄어든다.

- 객체 단위로 코드가 나눠져 작성되기 때문에 디버깅이 쉽고 유지보수에 용이하다. 

- 데이터 모델링(모든 객체와 그것들이 서로 어떤 연관성이 있는지를 식별하는 것)을 할 때 객체와 매핑하는 것이 쉽기 때문에 요구사항을 명확하게 파악해 프로그래밍을 할 수 있다.

 

oop의 단점

- 객체 간의 정보 교환이 모두 메시지 교환을 통해 일어나 시스템에 많은 overhead가 발생하게 된다. 이부분은 하드웨어의 발전으로 많은 부분이 보안되었다.

- 객체지향 프로그래밍은 "객체가 상태를 갖는다"는 특징으로 변수가 존재하고 이 변수를 통해 객체가 예측할 수 없는 상태를 갖게 되어 애플리케이션 내부에서 버그를 발생시킨다. 

 

객체 지향적 설계 원칙

SRP(Single Responsibility Principle) : 단일 책임 원칙

클래스는 단 하나의 책임을 가져야 하면 클래스를 변경하는 이유는 단 하나의 이유이어야 한다.

 

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

확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다.

 

LSP(Liskov Substitution Principle) : 리스코프 치환 원칙

상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.

 

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

인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다.

 

DIP(Dependency Inversion Principle) : 의존 역전 원칙

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

 

RESTful API

REST란 하나의 아키텍처로 API 설계의 중심에 자원(Resource)가 있고 HTTP Method를 통해 자원을 처리하도록 설계하는 것이다. REST 의 기본 원칙을 성실히 지킨 서비스 디자인은 'RESTful' 하다 라고 표현할 수 있다.

 

RESTful 하게 API를 설계한다는 것

- 리소스와 행위를 명시적, 직관적으로 분리한다.

리소스는 "URI" 로 표현하고 리소스가 가리키는것은 "명사"로 표현되어야 한다.행위는 "HTTP Method"로 표현하고 , GET(조회)/POST(생성)/PUT(기존 entitiy 전체 수정)/PATCH(기존 entity 일부 수정)/DELETE(삭제) 을 분명한 목적으로 사용한다.

 

- Message는 Header와 Body를 명확하게 분리해서 사용한다.

Entity에 대한 내용은 body에 담는다. API 버전 정보, 응답받고자 하는 MIME 타입 등은 header에 담는다.

 

- API 버전을 관리한다.

특정 API를 변경할 때는 반드시 하위호환성을 보장해야 한다.

 

- 서버와 클라이언트가 같은 방식을 사용해 요청하도록 한다.

둘 다 json 형식으로 보내거나 form-data 형식으로 보내서 하나로 통일한다. URI가 플랫폼 중립적이여야 한다.

 

RESTful API의 장점

- Open API 를 제공하기 쉽다.

- 멀티플랫폼 지원 및 연동이 용이하다.

- 원하는 타입으로 데이터를 주고 받을 수 있다.

- 기존 웹 인프라(HTTP)를 그대로 사용할 수 있다

 

RESTful API의 단점

- 사용할 수 있는 메소드가 한정적이다.
- 분산환경에는 부적합하다.
- HTTP 통신 모델에 대해서만 지원한다.

 

TDD

TDD(Test-Driven Development)란 매우 짧은 개발 사이클의 반복에 의존하는 소프트웨어 개발 프로세스이다.개발자가 새로운 기능에 대한 자동화된 테스트케이스를 작성한 뒤 해당 테스트를 통과하는 간단한 코드를 작성한다. 

테스트 통과하는 코드를 작성하고 상황에 맞게 리팩토링하는 과정을 거치는 것으로 테스트가 코드 작성을 주도하는 개발 방식이다.

 

함수형 프로그래밍

함수형 프로그래밍은 immutable data , first-class citizen으로 크게 두가지의 특징을 갖고 있다.

 

immutable data

immutable data 객체는 그 값을 변경할 수 없는 객체를 의미해 값이 변경될 경우, 새로운 객체를 생성 후 변경된 값을 주입하여 반환해야 한다.

 

first-class citizen

함수형 프로그래밍 패러다임을 따르고 있는 언어에서의 함수는 first-class citizien으로 간주한다.

- 변수나 데이터 구조안에 함수를 담을 수 있어서 함수의 파라미터로 전달할 수 있고, 함수의 반환값으로 사용할 수 있다.

- 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.

- 함수를 리터럴로 바로 정의할 수 있다.(익명함수로 정의 할 수 있다)

 

 

Reactive Programming(반응형 프로그래밍)

반응형 프로그래밍은 선언형 프로그래밍(declarative programming)으로도 불리며, 명령형 프로그래밍의 반댓말이다.

또한 함수형 프로그래밍 패러다임을 활용하는 것을 말한다. 기본적으로 모든 것을 스트림(stream)으로 본다.

스트림이란 "값들의 집합" 으로 볼 수 있으며 제공되는 함수형 메소드를 통해 데이터를 immutable하게 관리할 수 있다.

 

MVC 패턴

MVC 패턴

 

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

Controller

모델과 뷰 사이를 이어주는 역할을 한다.클라이언트의 요청을 받았을 때, 그 요청에 대해 실제 업무을 수행하는 모델을 호출한다. 또한 클라이언트가 보낸 데이터가 있다면 , 모델에 쉽게 전달하기 위해 데이터를 가공한다. 모델이 업무를 마치면 그 결과를 뷰에 전달한다. 

Model

컨트롤러가 호출할 때, 요청에 맞는 역할을 수행한다. 비즈니스 로직을 구현하는 영역으로 응용 프로그램에서 데이터를 처리하는 부분이다.

View

유저 인터페이스(사용자에게 보여지는 부분)을 의미한다.컨트롤러로부터 받은 모델의 결과값을 가지고 사용자에게 출력할 화면을 만드는 일을 한다.

 

Git과 GitHub

Git

git이란 버전관리 도구(Version Control System) 중 하나이다. 

비선형적인 개발을 위해 브랜치 시스템을 도입했고, 원격저장소와 로컬을 분리함으로써 여러 개발자가 분산작업을 원활하게 할 수 있게 고안되었다.

 

Gitflow vs GitHub flow vs GitLab flow

Git을 사용하기 위한 브랜치 전략 3가지

 

Git Flow

가장 최초로 제안된 workflow 방식이며, 대규모 프로젝트 관리에 적합한 방식으로 평가받는다.

GitHub Flow

git-flow를 개선하기 위해 나온 하나의 방식으로 흐름과 역할이 단순하다. 

GitLab Flow

github-flow의 간단한 배포 이슈를 보안하기 위해 관련 내용을 추가로 덧붙이 flow방식이다.

 

GitHub

Github는 버전관리, 소스코드 공유 등이 가능한 원격저장소이다.

 

Reference

https://github.com/JaeYeopHan/Interview_Question_for_Beginner

https://youngtoad.tistory.com/46

'CS' 카테고리의 다른 글

쿠키와 세션 vs 토큰과 JWT  (0) 2023.05.31
Data Structure  (0) 2023.04.02
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함