728x90

전체 글 176

[개념 정리/디자인 패턴] 생성 패턴 - 팩토리 패턴

팩토리 패턴(Factory pattern) 팩토리 패턴이란 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴이다. 상위 클래스에서는 객체 생성 방식에 관여하지 않고, 객체 생성 로직은 하위 클래스에서만 관리 되기 때문에 역할이 분리되어 유연성과 유지 보수성이 높다. 예시 아래는 자바스크립트 코드 예시이다. class CoffeeFactory { static createCoffee(type){ const factory = factoryList[type] return factory.createCoffee() } } class Latte { constructor(){ this.name = "latte" } } class Es..

[개념 정리/디자인 패턴] 생성 패턴 - 싱글톤 패턴

생성 패턴 중 하나인 싱글톤 패턴에 대해 알아보자. 싱글톤 패턴 (Singleton pattern) 싱글톤 패턴은 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴이다. 하나의 클래스를 기반으로 여러 개의 개별적인 인스턴스를 만들 수 있으나, 그렇게 하지 않고 하나의 클래스를 기반으로 단 하나의 인스턴스를 만들고, 이를 기반으로 로직을 구성하는데 쓰이며, 주로 데이터베이스 연결 모듈에 많이 사용된다. 장점 하나의 인스턴스를 기반으로 다른 모듈이 그 인스턴스를 공유하여 사용하기 때문에, 인스턴스 생성 비용이 낮다. 그렇기에 인스턴스 생성 비용이 높은 I/O 바운드* 작업에 많이 사용된다. (*I/O 바운드: 네트워크 통신, 데이터베이스 연결, 파일 시스템, 디스크 연결 등) 단점 의존성이 높아지며, 이는..

[개념 정리] 라이브러리 vs 프레임워크

라이브러리와 프레임워크의 차이는 면접 단골 질문이다. 둘이 어떻게 다른지 알아보자. 라이브러리 라이브러리는 공통으로 사용될 수 있는 특정한 기능들을 모듈화한 것으로 폴더명, 파일명 등에 대한 규칙이 없고 프레임워크에 비하여 상대적으로 자유롭다. 예시로는, 자바스크립트의 axios 등이 있다. 프레임워크 프레임워크는 공통으로 사용될 수 있는 특정한 기능들을 모듈화한 것을 말한다. 폴더명, 파일명 등에 대한 규칙이 있으며, 라이브러리에 비해 엄격하다. 예시로는, 자바스크립트의 vue.js, NestJS, 파이썬의 Django 등이 있다. 비교 라이브러리를 우리가 운전할 수 있는 자동차에 비유한다면 프레임워크는 우리가 탑승하는 비행기에 비유할 수 있다. 자동차는 우리가 핸들을 꺾어 자유롭게 사용할 수 있지만,..

[개념 정리] 디자인 패턴

디자인 패턴 디자인 패턴이란 프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 '규약' 형태로 만들어 놓은 것이다. 디자인 패턴은 라이브러리나 프레임워크를 만드는 데 기촉적인 원리가 되며, 지금도 많은 라이브러리, 프레임워크가 어떠한 디자인패턴을 기반으로 만들어지고 있다. 예를 들어 passport.js 라이브러리는 전략 패턴을 사용한다. 의의 디자인 패턴을 공부하여 알고 있다면 다양한 형태의 문제를 마주하였을 때 어떠한 디자인 패턴을 활용하여 문제를 해결할 지 영감을 얻을 수 있으며, 팀원들과 협업할 때 서로 빠른 의사소통이 가능하다. 종류 디자인 패턴은 크게 생성 패턴, 구조 패턴, 행동 패턴 3가지로 구분된다. 생성 패턴 생성 패턴은 객체 생성 방법이 포..

[개념 정리] 추상화

추상화란? 프로그래밍에서 추상화란 복잡한 데이터, 구조, 시스템 등으로부터 핵심만을 추려내 덜 자세하게 만드는 것, 또는 세부 사항, 절차 등을 감추고 인페이스를 만들어 복잡도를 낮추는 방법을 말한다. 쉽게 말해, 복잡한 컴퓨터의 활동들을 당장 알 필요 없는 부분들은 생략하고 인간이 직관적으로 이해할 수 있도록 만드는 과정이라고 할 수 있을 것 같다. 추상화는 크게 데이터 추상화와 프로세스 추상화 두 가지로 분류된다. 데이터 추상화 여러 데이터가 함께 있을 때 그들의 공통점은 모으고, 차이점을 버린다. 예를 들어, 고양이, 강아지, 원숭이가 있다면 이들의 공통 특징인 '동물'을 '동물'이라는 카테고리로 카테고리화 시키는 것이 데이터 추상화이다. 프로세스 추상화 복잡한 내부 프로세스를 숨기는 것을 말한다...

[개념 정리] 오버로딩(overloading)과 오버라이딩(overriding)

오버로딩(overloading) 오버로딩이란 함수를 같은 이름으로 매개 변수의 개수, 타입, 순서를 다르게 하여 정의함으로서, 같은 이름의 여러 함수를 정의하는 것을 말한다. 자바스크립트만 개발해본 사람으로서 생소한 개념인데, 자바스크립트에서는 오버로딩 기능을 지원하지 않는다. 대표적으로 자바와 C++에서 사용되며, 언어마다 지원 여부가 다르다. 오버로딩을 잘 활용하면, 프로그램의 유연성을 높이고, 코드를 깔끔하게 하여 가독성을 높이는 효과가 있다. 오버로딩은 같은 클래스 내에서 사용된다. 자바와 C++은 아직 잘 몰라서 강의의 자바 예시를 가져왔다. class Person{ void pay(String a, int b){ System.out.println(a + "가" + b + "원만큼 계산합니다."..

[개념 정리] 클래스 - static 장단점

class에서 사용하는 static을 처음 사용해본 것은 NestJS로 프로젝트를 진행하며, entity class 내에서 다른 class의 메서드를 사용하고자 했으나 entity class 내에서는 다른 클래스의 인스턴스화가 어려워 일반 메서드를 사용하기 어려웠다. 그때 필요한 메서드를 static 메서드로 만드니 사용할 수 있었다. 당시에는 static 방식이 인스턴스를 만들지 않고도 메서드와 속성을 사용할 수 있어 만능처럼 느껴졌으나, static에는 장단점이 존재한다. Static static은 인스턴스가 아닌 클래스에 속하며, 클래스의 변수나 메서드 등을 공유하는데 사용된다. 이를 통해 해당 클래스로 만들어지는 객체 사이에서 중복되는 메서드, 속성 등을 효율적으로 정의할 때 쓰인다. 단순히 전역..

[개념 정리] 클래스, 객체, 인스턴스

객체 지향 프로그래밍을 처음 접했을 때 클래스와 인스턴스, 그리고 객체의 개념이 와닿지 않아 이해가 어려웠다. 셋의 개념을 정리해보자. 클래스 (class) 클래스란 객체를 만들기 위한 틀이다. 틀로 찍어낼 객체의 속성과 메서드의 집합이 담겨 있다. 객체 (object) 객체란 클래스로부터 만들어지는 실체, 클래스로 선언된 변수이다. 인스턴스 (instance) 인스턴스란 객체가 메모리에 할당된 상태이며, 런타임에 구동되는 객체를 말한다. 객체와 같은 의미로 쓰이기도 한다. (참고로, AWS에서 클라우드의 가상 서버를 인스턴스라고 부르기도 한다.) 예시 클래스와 인스턴스(객체)의 관계를 설명할 때 가장 많이 사용되는 예시로는 붕어빵 틀이 있다. 붕어빵을 만들어 낼 때 붕어빵 틀에 반죽과 소를 넣어 붕어빵..

[개념 정리] CI/CD

팀 단위로 코드를 작성한 후 서비스를 운영하기 위해서는 지속적으로 코드를 합치고, 코드를 배포해야 한다. 지속적인 코드 병합 및 배포를 CI/CD(Continuous Integration/Delivery&Deployment)라고 부른다. 여러 개발자가 협업하는 과정에서 배포까지 일어나는 과정들을 기존에는 수동으로 모두 처리했으나, 반복적인 과정이기에 이를 프로세스화하여 자동으로 진행시켜주는 툴이 나오게 된 것이다. 파이프라인 코드 구축부터 배포까지의 일련의 과정을 CI/CD 파이프라인이라고 한다. 크게 3단계로 구성된다. 1. Continuous Integration: 코드를 빌드하고 테스트하고 합친다. 2. Continuous Delivery: 해당 레포지토리에 올린다. 3. Continuous Dep..

728x90