해당 포스트는 https://github.com/JaeYeopHan/Interview_Question_for_Beginner를 공부한 기록임
좋은 코드란
읽기 쉬운 코드, 중복이 없는 코드, 테스트가 용이한 코드..
내 개인적인 생각으로는 무조건적으로 협력할 때 큰 어려움을 겪지 않는 코드,즉 잘 정리되어 있고 (조직이 코딩 컨벤션을 가지고 있으면 컨벤션을 잘 따르고) 통일감이 있어 코드를 읽기에 불편함이 없는 코드가 좋은 코드인 것같다.
OOP
객체 지향 프로그래밍. object 중심으로 프로그래밍을 하는 것으로, 객체가 있고 객체는 method라는 행동 방식을 부여받는다. 그 객체끼리의 관계를 구축하는 프로그래밍 방식이라고 생각한다. 실제 인간세계와 유사한 방식으로 인간 중심적 프로그래밍 패러다임이다.
특징 : 추상화, 재사용성이 높음, 많은 overhead
SOLID : 객체 지향적 설계 원칙
- Single Responsibility Principle : 단일 책임 원칙
- 클래스는 단 '하나'의 책임을 가져야 함. 변경 또한 하나의 이유로 이루어져야 함
- Open-Closed Principle : 개방-폐쇄 법칙
- 확장에는 열려있고(상속받아서 확장), 변경에는 닫혀 있다(내부 변수, 내부 메소드 등 private한 것 수정 불가능).
- Liskov Substitution Principle : 리스코프 치환 원칙
- 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 함
- Interface Segregation Principle : 인터페이스 분리 원칙
- 인터페이스는 인터페이스를 사용하는 클라이언트를 기준으로 분리
- Dependency Inversion Principle : 의존 역전 원칙
- 고수준 모듈은 저수듈 모듈의 구현에 의존해선 안된다.
API, Application Programming Interface
- 컴퓨터/컴퓨터 프로그램 사이의 연결
- 다른 종류의 소프트웨어에 서비스를 제공
RESTful API
- REST : REpresentational State Transfer
- REST의 6가지 원칙
1. Uniform Interface
- Stateless
- Caching
- Client-Server
- Hierarchical System
- Code on Demand
- RESTful하게 API 디자인을 한다는 것
1. 리소스와 행위를 명시적이고 직관적으로 분리(행위=>GET,POST,PUT,DELETE, PATCH 행위는 이를 통해 나타나고 endpoint에서 요구하는 자원은 명사로 표현)
2. Msg => Header와 Body 명확히 분리(Header에는 API 버전 정보, MIME타입 등, body에는 Entity에 대한 정보)
- 장점 : Open API 를 제공하기 쉽다, 멀티플랫폼 지원 및 연동이 용이, 원하는 타입으로 데이터를 주고 받을 수 있음,기존 웹 인프라(HTTP)를 그대로 사용할 수 있음
- 단점 : 사용할 수 있는 메소드가 4 가지 밖에 없음, 분산환경에는 부적합, HTTP 통신 모델에 대해서만 지원
TDD
- 매우 짧은 개발 사이클의 반복에 의존하는 소프트웨어 개발 프로세스.
- 요구되는 기능에 대한 자동화된 테스트케이스 작성 => 해당 테스트를 통과하는 가장 간단한 코드 작성 => 상황에 코드를 리팩토링하는 과정을 거침
- 즉, 테스트가 코드 작성을 주도하는 개발 방식!
- 코드의 양이 늘어나게 되고, 테스트 코드 작성하기 까지의 과정이 길다(어떤 테스트 프레임워크 쓸지, 어떻게 테스트하고 어떤 부분 테스트해야하고.. 그 외에도 학습양이 많음). 또한 모든 경우에 대한 테스트 코드를 작성하기는 불가능에 가깝다.
- 속도보다는 높은 퀄리티가 중요한 프로젝트에서 사용해볼만하다.
Agile 방법론
- TDD와 마찬가지로 짧은 개발 사이클의 반복이다.
- 개인과 개인 간의 상호작용이 프로세스 및 툴보다 우선
- 작동하는 소프트웨어가 포괄적인 문서보다 우선
- 고객과의 협업이 계약 협상보다 우선
- 변화에 대응하는 것이 계획을 따르는 것보다 우선(융통성있는 개발!)
----밑에 내용 추가
함수형 프로그래밍
- 특징 : immutable data, first class citizen
MVC패턴
- model, view, controller 분리
Git / Github
- git 전략 : gitflow, githubflow, gitlab flow