분류 전체보기 166

[객체지향의 사실과 오해] 3장 타입과 추상화

일단 컴퓨터를 조작하는 것이 추상화를 구축하고, 조작하고, 추론하는 것에 관한 모든 것이라는 것을 깨닫고 나면 (훌륭한) 컴퓨터 프로그램을 작성하기 위한 중요한 전제 조건은 추상화를 정확하게 다루는 능력이라는 것이 명확해 진다. - 키스 데블린 - 지하철을 이용하는 승객의 목적은 하나의 역에서 다른 역으로 이동하는 것이다. 승객이 원하는 것 어떤 역에서 출발해야 하는지 어떤 역에서 환승해야 하는지 어떤 역을 거쳐야 가장 빠르게 목적지에 도착할 수 있는지를 직관적이고 단순하게 보여주는 것 지하철 노선도는 사실적으로 지형을 묘사했는지가 아니라 역과 역사이 연결성을 얼마나 직관적으로 표현했느냐이다. 초기 지하철 노선도는 본래의 목적과는 무관한 사실적인 지형 정보를 혼합함으로써 중요한 정보를 파악하기 힘들게 만..

[이펙티브 자바] Item 2 : 생성자에 매개변수가 많다면 빌더를 고려하라

정적 팩터리와 생성자에는 똑같은 제약이 있다. 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 점이다. 이 문제에 대해 세가지 대안이 있다. EX_) 식품 포장의 영양정보를 표현하는 클래스를 생각해보면 영양 정보에는 많은 선택 항목들로 이루어지고 많은 제품에서 해당 선택항목 중 대다수의 값이 0이다. 이러한 경우 해당 클래스의 인스턴스를 만드려면 원하는 매개변수를 모두 포함한 생성자 중 가장 짧은 것을 골라 호출해 사용하면된다. 보통 이런 생성자는 사용자가 설정하기 원치 않는 매개변수까지 값을 지정해서 포함시켜야 하는 경우가 있다. 💡 이러한 경우 점층적 생성자 패턴 을 사용할 수 있지만 매개변수의 개수가 많아지면 사용하기 어렵다. 점층적 생성자 패턴? 생성자를 필수 매개변수 1개만 받는 생성자, 필..

[객체지향의 사실과 오해] 2장 이상한 나라의 객체

객체지향 패러다임은 지식을 추상화하고 추상화한 지식을 객체 안에 캡슐화함으로써 실세계 문제에 내재된 복잡성을 관리하려고 한다. 객체를 발견하고 창조하는 것은 지식과 행동을 구조화하는 문제다. 레베카 워프스브록 객체 지향과 인지 능력 인간이 직접적으로 지각할 수 있는 대부분의 객체는 물리적인 경계를 지닌 구체적인 사물이다. 그러나 인간의 인지 능력은 물리적인 한계를 넘어 개념적으로 경계 지을 수 있는 추상적인 사물까지도 객체로 인식할 수 있게 한다. 예를 들어 주문과 계좌 이체는 비록 물리적인 실체는 존재하지 않더라도 인간이 쉽게 구분하고 하나의 단위로 인지할 수 있는 개념적인 객체의 일종이다. 세상을 더 작은 객체로 분해하는 것은 본질적으로 세상이 포함하고 있는 복잡성을 극복하기 위한 인간의 작인 몸부림..

[객체지향의 사실과 오해] 1장 협력하는 객체들의 공동체

시지를 생각하라 전체는 부분의 합보다 크다. -스티븐 코비- 실세계의 모방이라는 개념은 객체지향의 기반을 이루는 철학적인 개념을 설명하는데는 적합하지만 유연하고 실용적인 관점에서 객체지향 분석, 설계를 설명하기에는 적합하지 않다. 객체지향의 목표는 실세계를 모방하는 것이 아니다. 오히려 새로운 세계를 창조하는 것이다. ⇒ 고객과 사용자를 만족시킬 수 있는 신세계를 창조하는 것이다. 전통적 관점에서의 객체 지향 커피를 주문하고 나오는 모든 과정 속에는 손님, 캐시어, 바리스타 사이의 암묵적인 협력 관계가 존재한다. 주문을 하는 손님, 주문을 받는 캐시어, 커피를 제조하는 바리스타라는 역할이 존재한다. 커피를 제공하기 위해 협력하는 과정에서 자신이 맡은 바 책임을 다한다. 커피 주문이라는 협력에 참여하는 모..

[docker] 도커란? 도커의 기본

도커란? 도커란 컨테이너 환경을 도입해서 데이터와 프로그램을 격리 시키는 기능을 제공하는 소프트 웨어이다. 도커는 컨테이너 환경을 손쉽게 만들 수 있는 기능과 각 컨테이너를 손쉽게 동작시킬 수 있는 도커 엔진을 제공하며 도커만 설치되어 있다면 운영체제가 달라도 컨테이너를 옮길 수 있다. 도커를 이용한다면 물리적 서버의 차이, 서버 구성의 차이를 무시할 수 있다. 이로 인해 개발 서버와 운영서버 간의 환경차이로 인한 문제를 방지할 수 있다. 컨테이너 운영체제 수준의 가상화 기술로 리눅스 커널을 공유하면서 프로세스를 격리된 환경에서 실행하는 기술이다. 도커 이미지 컨테이너 실행에 필요한 파일, 설정 값 들을 포함하고 있다. 컨테이너의 상태가 바뀌거나 삭제되어도 이미지는 변하지 않는다. 도커를 이용해 데이터와..

벡엔드/docker 2023.10.24

[docker] 도커 기본 명령어

도커 명령어 컨테이너를 다루는 명령어는 ‘docker’ 명령어로 시작한다. 도커 명령어의 기본 형태 docker 커맨드(상위/하위) (옵션) 대상(이미지) (명령어)(인자) 커맨드(상위/하위) ‘무엇을’, ‘어떻게’에 해당하는 부분 커맨드는 상위 커맨드(’무엇을’)와 하위 커맨드(’어떻게’)로 구성되어있다. 상위 커맨드는 12 종류가 있다. ex) docker container start penguin 옵션 옵션은 커맨드에 세세한 설정을 지정하는 용도 커맨드의 실행 방법 or 커맨드에 전달할 값을 지정 ex) -d, —name penguin, -dit 대상(이미지) 커맨드와 달리 구체적인 이름을 지정 ex) docker container start (옵션) penguin 명렁어 인자 대상에 전달할 명령어..

벡엔드/docker 2023.10.24

[Mac] 자바 버전 변경 하기 with asdf (개발 환경 셋팅하기)

우아한 테크 코스를 진행하며 코드를 자바 17로 개발하고 테스트해야 했기에 기존 프로젝트를 자바 11버전으로 진행한 맥북의 자바 버전 변경 필요가 있었다. 자바 버전을 손쉽게 변경해주는 asdf를 이용해 자바 환경을 셋팅해 주었다. asdf란? mac os의 각종 프로그램의 버전을 손쉽게 관리해주는 도구이다. asdf를 사용하면 버전별로 설치할 수 있는 장점이 존재한다. asdf 설치하기 이미 brew를 통해 java를 설치했다면 brew uninstall을 통해 jdk를 삭제 후 진행해야 한다. 각종언어 버전 관리 해주는 asdf 설지 brew install asdf asdf의 장점은 java home path 수정 없이 간편하게 각종 버전을 변경 가능하다. // zshrc && brew 인 경우 ec..

[알고리즘] 자료구조 기초 (스택, 큐, 재귀함수)

탐색이란? 탐색이란 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정을 의미한다. 대표적인 탐색 알고리즘으로 DFS와 BFS를 꼽을 수 있는데 이 둘을 이해하기 위해서는 기본 자려구조인 스택과 큐에 대한 이해가 되어야 한다. 자료구조란? 자료구조란 데이터를 표현하고 관리하고 처리하기 위한 구조를 의미한다. 그중 스택과 큐는 자료구조의 기초개념으로 다음의 두 핵심적인 함수로 구성된다. 삽입(push) : 데이터를 삽입한다. 삭제(pop) : 데이터를 삭제한다. 추가로 스택과 큐를 사용할 때에는 언더플로(underflow)와 오버플로(overflow)를 고려해야한다. 오버플로는 특정한 자료구조가 수용할 수 있는 데이터의 크기를 이미 가득 찬 상태에서 삽입 연산을 수행할 때 발생한다. 반면 특정한 자료구조에..

알고리즘/개념 2023.08.13

[프로그래머스] 베스트앨범 by 파이썬 (Python) : 해시

https://school.programmers.co.kr/learn/courses/30/lessons/42579 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 난이도 LV 3 문제 설명 장르별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려고한다. 노래는 고유 번호로 구분되며 노래를 수록하는 기준은 아래와 같다. 속한 노래가 많이 재생된 장르를 먼저 수록합니다. 장르 내에서 많이 재생된 노래를 먼저 수록합니다. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다. 노래 장르를 나타내는 문자열 배열 gen..

[프로그래머스] 기지국 설치 by 파이썬 (Python)

https://school.programmers.co.kr/learn/courses/30/lessons/12979 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 난이도 LV 3 문제 설명 아파트 N개가 주어지고 아파트 옥상에 기지국이 설치되어있다. 해당 기지국의 범위가 w로 변경되면서 기지국을 추가로 설치해야하는데, 이때 최소로 설치하는 기지국의 개수를 return해줘야한다. 기지국 설치 아파트기준으로 양쪽으로 w만큼 전달 할 수 있다. ex_) 만약 4번 아파트에 w가 2라면 2,3,4,5,6 번의 아파트를 해당 기지국으로 커버할 수 있다. 접근법 모든..