CS
Array vs LinkedList
📚 Array Array는 가장 기본적인 자료구조이다. 정적 메모리 할당 방식이기 때문에 stack 영역에 저장된다. Array는 논리적 저장 순서와 물리적 저장 순서가 일치하는데, 이 말은 배열의 원소가 메모리에 중구난방으로 저장되는 게 아니라 연속적으로 저장된다는 뜻이다. 따라서 처음 저장된 위치만 알면 인덱스를 통해 O(1)의 시간으로 나머지 원소에 접근하는 것이 가능해진다. 인덱스를 통한 접근이 가능하다는 것은 random access가 가능하다는 말과 동일하다. 👍 Array Pros. 1. 논리적 저장 순서 = 물리적 저장 순서(접시가 쌓이듯...) 따라서 찾고자 하는 원소의 인덱스 값만 알고 있으면 O(1)에 해당 원소에 접근하는 것이 가능하다. 2. 자료를 하나의 연속적인 묶음으로 저장하기..
Git & GitHub
Git Git이란, 무료 오픈 소스 분산 버전 관리 시스템(VCS, Version Control System)이다. 분산 버전 관리 시스템이라는건 간단하게 말해서 나중에 특정한 버전을 불러올 수 있도록 소스 코드 같은 파일의 변경사항을 기록하는 시스템을 말한다. 이런 역할을 하는건 Git뿐만 아니라 Bitbucket, Gitlab이라는 것도 있다. Git의 장점 1. 버전 관리 이런 경우를 한번 가정해보자. 고객한테 이러이러한 기능을 만들어달라는 문의가 들어와서 Ver.1 기능도 추가하고 또 새로운 기능을 추가해서 Ver.2를 만들고 또 새로운 기능을 추가해서 Ver.3도 만들고 이렇게 Ver.4까지 완성을 했는데 갑자기 고객이 이거 다 별로고 처음 버전(Ver.1)이 가장 좋은 것 같다고 하는데! 이럴..
MVC 패턴
MVC 패턴 MVC 패턴은 모델(Model), 뷰(View), 컨트롤러(Controller)로 이루어진 디자인 패턴이다. MVC 패턴은 애플리케이션의 구성 요소를 세 가지 역할로 구분하여 개발 프로세스에서 각각의 구성 요소에만 집중해서 개발할 수 있다. MVC의 각 컴포넌트의 역할 [Model] 모델은 애플리케이션의 데이터인 데이터베이스, 상수, 변수 등을 뜻한다. 예를 들어, 사각형 모양의 박스 안에 글자가 들어있다면 이 사각형 모양의 박스 위치 정보, 글자 내용, 글자 위치, 글자 포맷 등에 관한 정보를 모두 가지고 있어야 한다. 뷰에서 데이터를 생성하거나 수정하면 컨트롤러를 통해 모델을 생성하거나 갱신한다. [View] 뷰는 UI 로직과 데이터를 시각적으로 표시하는 방법, 즉 웹 애플리케이션 또는 ..
함수형 프로그래밍
함수형 프로그래밍 함수형 프로그래밍은 거의 모든 것을 순수 함수로 나누어 문제를 해결하는 기법으로, 작은 문제를 해결하기 위한 함수를 작성하여 가독성을 높이고 유지보수를 용이하게 해 준다. 또한, 모든 것을 순수한 수학적 함수 스타일로 묶으려고 하는 프로그래밍 패러다임이다. 함수형 프로그래밍은 '어떻게 해결할 것인가'가 주안점인 명령형 스타일과 달리 '무엇을 해결할 것인가'가 주안점이다. 함수형 프로그래밍을 지원하는 언어들에는 Haskell, JavaScript, Python, Scala, Erlang, Lisp, ML 등이 있다. 함수형 프로그래밍의 특징 1. 순수 함수 int sum(int a, int b) { return a + b; } sum 함수는 두 개의 숫자만 입력받아 두 수의 합을 반환하는..
TDD(Test-Driven Development)
🚀 TDD란 무엇인가 Test-Driven Development(TDD)는 매우 짧은 개발 사이클의 반복에 의존하는 소프트웨어 개발 프로세스이다. TDD는 설계 이후 코드 개발 및 테스트 케이스를 작성하는 기존의 개발 프로세스와 달리, 테스트 케이스를 먼저 작성한 후 이 테스트가 통과할 수 있는 실제 코드를 개발하여 리펙토링 하는 절차를 따른다. 이러한 이유로 TDD를 Test First Development라고도 한다. ♻️ TDD 사이클 1️⃣ Add a test 2️⃣ Run all tests and see if the new test fails (처음에는 production code가 없기 때문에 테스트가 실패하는게 당연) 3️⃣ Write the code 4️⃣ Run tests 5️⃣ Refa..
RESTful API
RESTful API에 대해 알아보기 전에 REST가 무엇인지부터 알아보자. REST(REpresentational State Transfer) REST는 웹과 같은 분산 하이퍼미디어 환경에서 자원의 존재, 상태 정보를 표준화된 HTTP 메서드로 주고받는 웹 아키텍처이다. 즉, HTTP URI(Uniform Resource Identifier)를 통해 자원을 명시하고 HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD 연산을 적용하는 것을 의미한다. REST는 크게 리소스(자원), 메서드(처리), 메시지의 3가지 요소로 구성된다. 만약 "닉네임이 수풀림인 사용자를 생성해라"라는 호출이 있을 때 리소스, 메서드, 메시지는 각각 아래와 같다. 리소스 = 사용자 ..
객체 지향 프로그래밍의 설계원칙, SOLID
객체 지향 프로그래밍을 설계할 때는 SOLID 원칙을 지켜야 한다. S ingle Responsibility Principle(SRP) O pen Closed Principle(OCP) L iskov Substitution Principle(LSP) I nterface Segregation Principle(ISP) D ependency Inversion Principle(DIP) SRP(Single Responsibility Principle, 단일 책임 원칙) 모든 클래스는 단 하나의 책임만 가져야 하고 메서드나 클래스를 수정하는 이유도 단 하나여야 한다는 원칙이다. 예를 들어, 당근 마켓에서 중고거래를 하는 경우를 생각해보자. 당근 마켓의 유저는 크게 판매자와 구매자로 나눌 수 있다. // SRP를..
오버로딩(Overloading) vs 오버라이딩(Overriding)
오버로딩과 오버라이딩은 객체지향프로그래밍의 특징 중 다형성에 포함되는 개념이다. 📌 오버로딩(Overloading) 오버로딩은 같은 이름을 가진 메서드를 여러 개 두는 것을 말한다. 메서드의 타입, 매개변수의 타입, 매개변수의 개수 등으로 다양한 종류를 생성할 수 있고 컴파일 중에 발생하는 정적 다형성이다. // 오버로딩 예제(Kotlin) class Person { fun eat(a: String) { println("I eat$a") } fun eat(a: String, b: String) { println("I eat $a and $b") } } 오버로딩은 이처럼 같은 역할을 하는 함수를 하나의 이름으로 사용할 수 있다는 장점이 있다. 내가 음식 한개를 먹었던, 두개를 먹었던, 내가 먹은 음식을 전..