개발기본지식

이진희·2022년 1월 8일
0

해당 포스트는 https://github.com/JaeYeopHan/Interview_Question_for_Beginner를 공부한 기록임

좋은 코드란

읽기 쉬운 코드, 중복이 없는 코드, 테스트가 용이한 코드..
내 개인적인 생각으로는 무조건적으로 협력할 때 큰 어려움을 겪지 않는 코드,즉 잘 정리되어 있고 (조직이 코딩 컨벤션을 가지고 있으면 컨벤션을 잘 따르고) 통일감이 있어 코드를 읽기에 불편함이 없는 코드가 좋은 코드인 것같다.

OOP

객체 지향 프로그래밍. object 중심으로 프로그래밍을 하는 것으로, 객체가 있고 객체는 method라는 행동 방식을 부여받는다. 그 객체끼리의 관계를 구축하는 프로그래밍 방식이라고 생각한다. 실제 인간세계와 유사한 방식으로 인간 중심적 프로그래밍 패러다임이다.
특징 : 추상화, 재사용성이 높음, 많은 overhead

SOLID : 객체 지향적 설계 원칙

  1. Single Responsibility Principle : 단일 책임 원칙
    • 클래스는 단 '하나'의 책임을 가져야 함. 변경 또한 하나의 이유로 이루어져야 함
  2. Open-Closed Principle : 개방-폐쇄 법칙
    • 확장에는 열려있고(상속받아서 확장), 변경에는 닫혀 있다(내부 변수, 내부 메소드 등 private한 것 수정 불가능).
  3. Liskov Substitution Principle : 리스코프 치환 원칙
    • 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 함
  4. Interface Segregation Principle : 인터페이스 분리 원칙
    • 인터페이스는 인터페이스를 사용하는 클라이언트를 기준으로 분리
  5. Dependency Inversion Principle : 의존 역전 원칙
    • 고수준 모듈은 저수듈 모듈의 구현에 의존해선 안된다.

API, Application Programming Interface

  • 컴퓨터/컴퓨터 프로그램 사이의 연결
  • 다른 종류의 소프트웨어에 서비스를 제공

RESTful API

  • REST : REpresentational State Transfer
  • REST의 6가지 원칙
    1. Uniform Interface
    1. Stateless
    2. Caching
    3. Client-Server
    4. Hierarchical System
    5. 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
profile
슬로우 스타터

0개의 댓글