도커 이미지와 컨테이너 : 가장 기본 단위이자, 도커 엔진의 핵심 두가지. 이미지: 여러 계층으로 된 바이너리이며 읽기 전용으로 불변이다. {저장소이름}/{이미지이름}/{태그} 형태 컨테이너: 이미지를 실행한 형태. 이미지의 종류에 따라 알맞은 설정과 파일을 갖는다. 도커 컨테이너 : 도커 이...
시작하세요! 도커 / 쿠버네티스 1장 - 도커란?
: 일반적으로 도커 엔진 혹은 도커 관련 모든 프로젝트를 의미한다. 가상 머신과 도커 컨테이너 기존의 방식 하이퍼바이저를 이용해 가상 머신에 운영체제를 설치해 사용하던 방식. 따라서 각 게스트 운영체제는 다른 게스트 운영체제와 완전히 독립된 공간과 시스템 자원을 할당받아 사용한다. (VMware, VirtualBox 등) 게스트 운...
Homebrew 오류 제거
문제 상황 : 파이썬 필요 모듈 install 과정에서 아래와 같은 에러 발생 ~~~ fatal error: 'Foundation/Foundation.h' file not found #import <Foundation/Foundation.h> ^~~~~~~~~~~~~~~~~~~~~~~~~ 해결 : 주로 m1 관련 이슈...
리팩터링 12장. 상속 다루기
: 객체지향의 가장 중요한 요소 중 하나인 상속에 관련된 리팩터링들. 대부분의 경우 상속을 잘못 사용하기 쉽다. 1. 메서드 올리기 : 두 서브클래스의 메서드가 같은 일을 수행한다면 슈퍼클래스의 공통된 메서드로 올려 중복을 제거한다. 보통 함수 매개변수화(리터럴을 매개변수로 받기)를 수행한 후에 수행이 가능하기도 하다. 서브클래스의 ...
리팩터링 11장. API 리팩터링
: 모듈간 통신이나 함수간 호출에서 연결부 역할을 하는 것이 API이다. 인터페이스가 복잡할 때 이 장의 리팩터링을 적용하면 전반적인 API가 이해하기 쉬워진다. 1. 질의 함수와 변경 함수 분리하기 : 질의(값 반환)하는 부분과 상태를 변경하는 부분을 분리한다. side effect 없이 값 반환만 해주는 함수를 추구할수록 언제 호출해...
리팩터링 10장. 조건부 로직 간소화
: 조건부 로직은 필연적인 요소이지만, 쉽게 프로그램을 복잡해보이게 만든다. 이 장의 리팩터링을 적용하면 이러한 로직들을 보다 이해하기 쉬운 코드로 바꿀 수 있다. 1. 조건문 분해하기 : 복잡한 조건절은 해당 코드의 목적이 무엇인지 파악하기 어렵게 만든다. 조건절과 작업들을 함수로 추출해주면 코드 의도가 확실히 전달된다. 2. 조건식 통...
리팩터링 9장. 데이터 조직화
: 데이터 구조에 집중한 리팩터링들. 1. 변수 쪼개기 : 한 변수는 하나의 역할만 수행하도록 한다. 한 변수에 두번 이상 대입이 이뤄진다면 해당 변수는 여러 가지 역할을 수행한다는 신호이다. 2. 필드 이름 바꾸기 제일 중요한 부분. 무슨 데이터로 구성되는지를 보면 프로그램을 이해하는데 도움이 된다. 넓은 범위로 참조되고 있다...
리팩터링 8장. 기능 이동
: 어떠한 요소를 다른 컨텍스트(클래스, 모듈 혹은 코드 라인)로 옮기는 방식의 리팩터링. 1. 함수 옮기기 모듈성을 높이기 위해 연관된 요소들끼리 묶는다. -> 모듈을 잘 분리하면 응집도가 높은 코드가 되고 캡슐화가 좋아진다. 프로그램 언어마다 모듈화 수단이 다르다. 자바의 경우 객체지향의 패러다임을 가지며, 따...
리팩터링 7장. 캡슐화
: 캡슐화가 잘 되어있을수록 모듈 각각은 내부가 다른 모듈에게 노출되지 않는다. 이 때 캡슐화의 단위는 클래스, 모듈, 심지어 함수도 될 수가 있다. 이 장의 리팩터링을 적용하면 많은 경우 캡슐화를 개선할 수 있다. 1. 레코드 캡슐화하기 무엇이 저장된 값이고, 무엇이 계산된 값인지 바깥에서 알 필요가 없고, 데이터를 더 의미있는...
변수 네이밍
고민? String name; int age; boolean isMale; List<String> names; // A List<String> nameList; // B 이름만 보고도 타입을 유추할 수 있는 변수가 있는가하면, 리스트의 경우 A, B 둘다 괜찮아보이긴 하다. 기존 코드가 B로 작성되어있다. 일관...