면접을 위한 CS 전공지식 노트 - MVC, MVP, MVVM 패턴

    책 '면접을 위한 CS 전공지식 노트'를 읽고 정리한 내용입니다. MVC 패턴 MVC 패턴은 모델(Model), 뷰(View), 컨트롤러(Controller)로 이루어진 디자인 패턴이다. 애플리케이션의 구성 요소를 세 가지 역할로 구분하여 개발 프로세스에서 각각의 구성 요소에만 집중해서 개발할 수 있다. 사용자의 입력은 Controller로 들어간다. 웹 개발에서는 Controller가 웹 요청을 처리하고, Model에서 데이터를 가져와 필요한 처리를 수행한 후, View에 결과를 전달해서 웹 페이지를 렌더링 한다. View - Controller 관계는 OnetToMany이며 간혹 ManyToMany 방식이 된다. 그래서 Controller는 원하는 View를 선택 가능하지만 View Controlle..

    면접을 위한 CS 전공지식 노트 - 이터레이터 패턴

    책 '면접을 위한 CS 전공지식 노트'를 읽고 정리한 내용입니다. 이터레이터 패턴 이터레이터 패턴은 기본 구현을 노출하지 않고 컬렉션의 요소에 액세스하는 방법을 제공하는 패턴이다. 이를 통해 순회할 수 있는 여러 가지 자료형의 구조와는 상관없이 어터레이터라는 하나의 인터페이스로 순회가 가능하다. Java에서의 이터레이터 패턴 import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class IteratorExample { public static void main(String[] args) { List list = new ArrayList(); list.add("apple"); list.add("banana"..

    면접을 위한 CS 전공지식 노트 - 프록시 패턴과 프록시 서버

    책 '면접을 위한 CS 전공지식 노트'를 읽고 정리한 내용입니다. 프록시 패턴 프록시 패턴(proxy pattern)은 대상 객체(subject)에 접근하기 전 그 접근에 대한 흐름을 가로채 대상 객체 앞단의 인터페이스 역할을 하는 디자인 패턴이다. 이를 통해 객체의 속성, 변환 등을 보완하며 보안, 데이터 검증, 로깅에 사용한다. 이는 프록시 객체로 쓰이기도 하지만 프록시 서버로도 활용된다. 🔥 프록시 서버에서의 캐싱 캐시 안에 정보를 담아두고, 캐시 안에 있는 정보를 요구하는 요청에 대해 다시 원격 서버에 요청하지 않고 캐시 안에 있는 데이터를 활용하는 것을 말한다. 이를 통해 불필요하게 외부와 연결하지 않기 때문에 트래픽을 줄일 수 있다는 장점이 있다. 프록시 서버 다른 네트워크 서비스에 간접적으로..

    면접을 위한 CS 전공지식 노트 - 팩토리 패턴

    책 '면접을 위한 CS 전공지식 노트'를 읽고 정리한 내용입니다. 팩토리 패턴(Factory pattern) 객체를 생성하는 디자인 패턴 중 하나이다. 객체 생성 부분을 떼어내 추상화한 패턴이자 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정한다. 객체 생성의 책임을 팩토리 클래스로 위임함으로써 객체를 생성하는 코드의 유연성과 재사용성을 높일 수 있다. 장점 객체 생성의 책임을 팩토리 클래스에 위임하기 때문에 객체 생성 코드의 변경이나 유지보수가 쉬워진다. 팩토리 클래스에서 한 번 작성하면 모든 클래스에서 재사용할 수 있기 때문에 객체 생성 코드의 중복을 제거해준다. 상위 클래스는 인스턴스 생성 방식에 대해 알 필요가 없기 때..

    면접을 위한 CS 전공지식 노트 - 싱글톤 패턴

    책 '면접을 위한 CS 전공지식 노트'를 읽고 정리한 내용입니다. 싱글톤 패턴(Singleton pattern) 하나의 인스턴스만 생성하고, 이 인스턴스를 전역적으로 접근 가능하게 만들어 사용하는 디자인 패턴 장점 인스턴스가 오직 하나만 생성되기 때문에, 생성 비용이 줄어들어 메모리 사용량을 절약할 수 있다. 전역적으로 접근 가능하기 때문에, 어디서든 쉽게 사용할 수 있다. 하나의 인스턴스를 사용하기 때문에 인스턴스 간에 상태를 공유할 수 있다. 여러 스레드가 동시에 인스턴스를 생성하려고 할 때, synchronized 키워드를 사용해 동시성 문제를 방지할 수 있다. 단점 전역 상태를 유지하기 때문에 다른 객체 간의 의존성이 높아지고 코드 유지보수가 어려워질 수 있다. 싱글톤 패턴은 테스트를 할 때 의존..

    면접을 위한 CS 전공지식 노트 - 시간 복잡도

    책 '면접을 위한 CS 전공지식 노트'를 읽고 정리한 내용입니다. 빅오 표기법 시간 복잡도란 ‘문제를 해결하는 데 걸리는 시간과 입력의 함수 관계’를 가리킨다. 쉽게 말해 어떤 알고리즘이 ‘얼마나 오랜 시간’이 걸리는지를 나타내는데 쓰이는 것이다. 이 시간은 보통 빅오 표기법으로 나타낸다. 빅오 표기법이란 입력 범위 n을 기준으로 해서 로직이 몇 번 반복되는지 나타낸느 것이다. 아래 코드의 시간 복잡도를 빅오 표기법으로 나타내면 O(n2)이 된다. for (int i = 0; i < 10; i++) { for (int j = 0; j < n; j++) { for (int k = 0; k < n; k++) { if (true) count

    Clean Code - 의미있는 이름

    로버트 C.마틴의 클린 코드를 읽고 정리한 내용입니다. 의미가 명확한 이름을 사용하자 변수, 함수 또는 클래스의 목적과 의미를 명확하게 설명하는 이름을 선택하자 아래 코드는복잡한 코드도 아니지만 코드가 하는 일을 짐작하기 어렵다. 문제는 코드의 함축성에 있다. 다시 말해, 코드 맥락이 코드 자체에 명시적으로 드러나지 않기 때문이다. public List getThem() { List list1 = new ArrayList(); for (int[] x : theList) if (x[0] == 4) list1.add(x); return list1; } 위 코드에는 아래와 같은 정보가 드러나지 않는다. theList에 무엇이 들어있는가? theList에서 0번째 값이 어째서 중요한가? 값 4는 무슨 의미인가?..

    Clean Code - 객체와 자료구조

    로버트 C.마틴의 클린 코드를 읽고 정리한 내용입니다. 자료 추상화 // 구체적인 클래스 public class Point { public double x; public double y; } // 추상적인 클래스 public interface Point { double getX(); double getY(); void setCartesian(double x, double y); double getR(); double getTheta(); void setPolar(double r, double theta); } 두 클래스는 2차원 점을 표현한다. 아래 코드는 직교좌표계를 사용하는지 극좌표계를 사용하는지 알 길이 없다. 그럼에도 인터페이스는 자료구조를 명백하게 표현하고 있다. 좌표를 읽을 때는 각 값을 개별..

    Clean Code - 단위 테스트(FIRST)

    로버트 C.마틴의 클린 코드를 읽고 정리한 내용입니다. 테스트는 유연성, 유지보수성, 재사용성을 제공한다. 테스트 케이스가 없다면 실제 코드를 유연하게 만드는 버팀목도 사라진다. 코드에 유연성, 유지보수성, 재사용서을 제공하는 버팀목이 바로 단위 테스트이다. 테스트 케이스가 있다면 실제 코드의 변경이 두렵지 않다. 테스트 케이스가 없다면 모든 변경은 잠정적인 버그가 된다. 테스트 코드가 지저분하면 코드를 변경하는 능력이 떨어지며 코드 구조를 개선하는 능력도 떨어진다. 테스트 코드가 지저분할수록 실제 코드도 지저분해지고 실제 코드도 망가진다. 깨끗한 테스트 코드 테스트 코드에서 가독성을 높이려면 가독성이 필요하다. 가독성을 높이기 위해서는 명로성, 단순성, 풍부한 표현력이 필요하다. 테스트 코드는 최소의 ..

    면접을 위한 CS 전공지식 노트 - 조인 (JOIN)

    책 '면접을 위한 CS 전공지식 노트'를 읽고 정리한 내용입니다. 조인(Join) 조인이란 하나의 테이블이 아닌 두 개 이상의 테이블을 묶어서 하나의 결과물을 만드는 것을 말한다. MySQL에서는 JOIN, MongoDB에서는 lookup이라는 쿼리로 처리할 수 있다. MongoDB에서는 lookup은 되도록 사용하지 말아야 한다. NoSQL은 RDBMS보다 JOIN 연산의 성능이 떨어진다고 알려져 있다. 여러 테이블을 조인하는 작업이 많을 경우 MongoDB보다는 RDBMS를 사용해야 한다. 조인의 종류 내부 조인(inner join) 왼쪽 테이블과 오른쪽 테이블의 두 행이 모두 일치하는 행이 있는 부분만 표기한다. select * from tableA A inner join tableB B on A...