CS/Basic

개발상식

whyWhale 2021. 3. 22.

좋은 코드란


  1.  목적대로 잘 동작하는 코드
    • 가독성이 좋은 코드
      • 코드리뷰에 대한 시간이 줄어든다.
      • 다른 곳에서 사용하기 용이하다.
      • 버그가 발생했을 때 파악하기 용이하다.
    • 중복이 없는 코드
      • 재사용성이 좋다.
      • 코드가 간결해진다.

 

 

객체 지향 프로그래밍이란


  • 컴퓨터 사고 중심의 패러다임에 벗어나 인간 중심적 프로그래밍 패러다임이라 한다.
  • 현실 세계를 프로그래밍적인 관점으로 옮겨와 하는 것이다.
    • 사물들의 특징들을 가지고 프로그래밍 하는 것.(정적인 개념,추상적 개념==객체)

 

  • 장점
    • 코드의 재사용성.
    • 객체 단위로 나누어져 코드가 작성되므로 디버깅과 유지보수가 용이하다
    • 대형 프로젝트에 적합(클래스 단위로 모듈화)
  •  
  •  단점
    • 객체간의 메시지 교환으로 많은 오버헤드가 발생한다.
    • 설계 단계에 많은 시간과 노력이 필요.

+ 객체 지향의 설계 원칙

  • 단일 책임 원칙 : 클래스는 단 하나의 책임만을 가져야 한다.
  • 개방 폐쇄 원칙 : 확장에는 열려 있어야 하고 변경에는 단혀 있어야 한다.
  • 리스코프 치환 원칙 : 상위 객체를 물려받은 하위 객체는 상위 객체를 사용하는 프로그램에 정상 작동 해야 한다.
  • 인터페이스 분리 원칙 : 하나의 일반적인 인터페이스 보다는 세분화하여 인터페이스를 분리하는 것이 좋다.
  • 의존 역전 원칙 : 고수준 모듈은 직접적인 구현 객체를 의존하는 것에 아닌 인터페이스에 의존해야 한다.
더보기

주 KEYWORD

 

keyword content
객체 속성과 행동을 가지고 있는 데이터 타입으로 SW 세계에 구현할 대상.
클래스 객체들의 속성을 묶어놓은 집합체 혹은 객체를 찍어내기 위한 틀
인스턴스 SW세계에서 실제로 구현된 실체.
추상화 형상을 뽑아내는 것.
인터페이스 밑그림만 있는 설계도.(상속 받은 클래스는 필히 실제로 구현을 해야 한다)
캡슐화 연관있는 변수와 함수를 클래스로 묶는 작업.
정보은닉 다른 객체에 공개하지 않고 숨기는 것.
상속 자식이 부모를 선택하여 물려받는 것.
다형성 여러 가지 형태를 가질 수 있는 능력.
오버로딩 같은 이름의 메서드를 여러개 가지면서 매개변수의 유형과 개수가 다르도록 하는 것.
오버라이딩 상위 클래스의 메소드를 사위 클래스가 재정의해서 사용하는 것.

dublin-java.tistory.com/48

 

[객체지향] OCP (개방 폐쇄의 원칙 : Open Close Principle)

글의 순서 if-else의 문제점 OCP (Open Close Principle) 전략 패턴 (Strategy Pattern) OCP란? Open Close Principle : 개방폐쇄의 원칙 시간이 지나도 유지 보수와 확장이 쉬운 시스템을 만들고자 로버트 마틴이..

dublin-java.tistory.com

객체에 대한 정의? ⇒ 객체란 식별 가능한 개체 또는 사물. 객체는 자동차처럼 만질 수 있는 구체적인 사물일 수도 있고, 시간처럼 추상적인 개념일 수도 있다. 객체는 구별 가능한 식별자, 특징적인 행동, 변경 가능한 상태를 가진다. 소프트웨어 안에서 객체는 저장된 상태와 실행 가능한 코드를 통해 구현된다.

 

RESTFUL API란


웹의 장점을 최대한 활용하여 사용할 수 있는 아키텍처.

 

REST 의 구성 요소

  • 자원(Resource) - URI
  • 행위 (Verb) - HTTP METHOD
  • 표현(Respresentations) - JSON,XML,TEXT ..

+ METHOD역할

METOD ROLE
POST POST를 통해 해당 URI를 요청하면 리소스를 생성합니다.
GET GET를 통해 해당 리소스를 조회합니다. 리소스를 조회하고 해당 도큐먼트에 대한 자세한 정보를 가져온다.
PUT PUT를 통해 해당 리소스를 수정합니다.
DELETE DELETE를 통해 리소스를 삭제합니다.

REST 특징

  1. 클라이언트 서버 구조
    • 클라이언트가 자원이 있는 서버에게 요청하는 구조
  2. 무상태
    • 서버는 여러 클라이언트들을 식별 할 수 없는 것. 
  3. 캐시 처리 기능
    • HTTP라는 기존 웹 표준을 그대로 사용하기 때문에, 웹에서 사용하는 기존 인프라를 그대로 활용이 가능하다.
    • 따라서 HTTP 프로토콜 표준에서 Last-modified태그나 E-Tag를 이용하면 캐싱 구현이 가능.
  4. 계층화
    • 그 앞단에 사용자 인증, 암호화,로드밸런싱 등을 하는 계층을 추가하여 구조상의 유연성을 줄 수 있다.
  5. 인터페이스 일관성(유니폼 인터페이스)
    • URI로 지정한 리소스에 대한 조작을 통일되고 한정적 인터페이스로 수행하는 아키텍처 스타일
  6. 자체 표현 구조
    • REST API 메시지를 통해 쉽게 이해할 수 있는 구조.
더보기

REST API 디자인 가이드

 

  1. URI는 정보의 자원을 표현한다.
  2. 자원에 대한 행위는 HTTP METHOD로 표현한다.
부적절한 API 적합한 API

GET /users/select/1

GET /users/1
urI 설계시 주의 점

1) 슬래시 구분자는 계층 관계를 나태는 데 사용
2) URI 마지막 문자로 슬래시 포함  x.
3) 하이픈(-)은 URI 가독성 높이는데 사용 (_사용  x.)
4) URI 경로 표현은 소문자가 적합하다.
5) 파일 확장자는 URI 포함시키지 않는다.

victorydntmd.tistory.com/286

meetup.toast.com/posts/92

flyingdcat4.tistory.com/73

 

 

 

TDD란


매우 짧은 개발 사이클의 반복에 의존하는 소프트웨어 개발 프로세스이다.

테스트가 통과하는 코드를 작성하고 상황에 맞게 리팩토링하는 과정을 거치는 것이다.

말 그대로 테스트가 코드 작성을 주도하는 개발방식인 것이다.

 -> 실패코드 작성 -> 성공코드작성 -> 리팩토링->

더보기

일반 개발 방식과 TDD 차이

 

일반 개발 방식.

일반 개발 방식의 잠재적 위험 요소

  1. 요구사항 처음부터 명확하지 않을 수 있다.(처음 부터 완벽한 설계는 어렵다)
  2. 자체 버그 검출 능력 저하 또는 소스코드의 품질의 저하
  3. 자체 테스트 비용 증가.

※ 작은 부분의 기능 수정에도 모든 부분을 테스트해야 하므로 전체적인 버그를 검출하기 어려워진다.

TDD 개발 방식

wooaoe.tistory.com/33

TDD의 장점과 단점

 

장점

  • 튼튼한 객체 지향적 코드 생산
  • 재설계 시간의 단축
  • 디버깅 시간 단축
  • 추가 구현 용이

단점

  • 생산성 저하
  • 배움의 틀 진입장벽
  • 요구사항에 맞게 구현하는 것이 아닌, 테스트 코드에 맞게 구현하는 경우 발생.

함수형 프로그래밍이란


  • 순수 함수로 나누어 문제를 해결하는 기법으로,작은 문제를 해결하기 위한 함수를 작성하여 가독성을 높이고 유지보수 용이.(대입문이 없는 프로그래밍.)
  • 함수형 프로그래밍은 무엇을(What)에 포커스를 두는 프로그래밍이다.
  • First Class Citizen or 1급 객체(멤버 변수가 1가지의 자료구조 변수로 이루어 진 것.)의 관리 떄문이다.
  • 명령형 프로그래밍에서는 메소드를 호출하면 상황에 따라 내부의 값이 변한다. (내가 작성한 메소드 내 변수의 메모리에 할당된 값이 바뀌는 등 변화가 생긴다)
  • 하지만 함수형 프로그래밍에서는 대입문이 없기 때문에 메모리에 한 번 할당된 값은 새로운 값으로 변할 수 없는 특징을 갖고 있다.

 

특징

한줄 요약 : 부수효과가 없는 순수 함수를 1급 객체로 간주하여 파라미터로 넘기거나 반환값으로 사용하며, 참조 투명성을 지킬 수 있다.

 

print(args) 라는 함수를 인자로 넘기고 있다.

참조 투명성을 통해 기존의 값은 변경되지 않고 유지된다.(Immutable Data)

process(10, print(num));
  • Side Effect 가 없다.
    • side effect 란
      • 변수의 값의 변경
      • 자료 구조의 수정
      • 객체의 필드값 설정
      • 예외 또는 오류가 발생하며 실행 중단.
      • 콘솔 또는 파일 I/O가 발생
    • side effect들을 제거한 함수는 순수 함수라 칭하며 함수형 프로그래밍에서 사용하는 함수이다.
    • 기대효과
      • 함수가 독립적이고 side effect가 없기 때문에 Thread에 안전성을 보장받을 수 있다.
      • Tread안정성을 보장받아 병렬 처리를 동기화 없이 진행할 수 있다.
      • 부작용(데이터의 변경) 제거하여 프로그램의 동작을 이해하고 예측을 용이하게 하는 것.
      • 요구사항의 변동에 유연하다.

 

 

MVC 패턴이란


Model,View,Controller 의 합성어로 SW공학에서 사용되는 소프트웨어 ※디자인 패턴 이다.

 

※디자인 패턴 : 구현자들 간의 커뮤니케이션의 효율성을 높이는 기법.(다수의 엔지니어들이 처리 할 수 있도록 한 규칙)

 

mode1 : controller ,view 과 합쳐진 방식

모델1방식을 통해 빠르고 쉽게 개발이 가능하지만, 디자이너와 개발발자 사이 분업이 어려워 유지보수에 어려움이 있다.

 

mode2 : view ,Controller 를 분리한 방식.

모델 1에 비해 설계의 어려움과 개발난이도가 높다 하지만 디자이너와 개발자의 분업이 가능하며 유지보수에 유리하다.

 

model 2 4

비즈니스 로직 영역과 프레젠테이션 영역이 분리되어 있는 구현 방식이다. 웹 브러우저 사용자의 요청을 servlet이 받는다. servlet은 요청을 view로 보열줄지, model로 보내줄 것인지 정하여 전송. View 페이지는 사용자에게 보여주는 역할만 하며 실직적인 기능은 model 부분에서 담당한다.

 

 

깃과 깃허브에 대해서


Git과 GitHub는 버전관리 시스템이다.

VCS : 코드가 변경된 부분을 모두 기억해준다는 의미를 갖는다.

 

git

  • 로컬에서 관리되는 버전 관리 시스템(Version Control System)
  • 소스코드 수정에 따른 버전을 관리해주는 시스템.

 

github

  • 클라우드 방식으로 관리되는 버전 관리 시스템(VCS)
  • 자체 구축이 아닌 빌려쓰는 클라우드 개념
  • 오픈소스는 일정 부분 무료로 저장가능(유료도 있음)

깃은 로컬에서 버전관리 시스템을 운영하는 방식, GitHub는 원격 저장소를 깃허브에서 제공하는 클라우드 서버를 이용한다는 것의 차이이다.

 

명령어

  • commit : Git(로컬 저장소)에 파일을 추가하거나 변경 내용을 저장하는 작업.
  • push : GitHub(원격 저장소)에 파일을 추가하거나 변경 내용을 저장하는 작업.
  • pull : Git(원격 저장소)에서 파일을 다운로드 또는 업데이트 하는 작업.
  • ※ pull request : 권한이 없는 코드를 나의 로컬 저장소(Git)으로 가져와 새로운 소스코드를 삽입 하거나 변경하는 작업에 대한 반영을 요청하는 작업이다. 권한을 가지고 있는 사람의 수락있어야 원격 저장소의 소스코드가 삽입 되거나 변경될 수 있는 것이다.

 

 

댓글