목록개발 (101)
Joonas' Note

git에 대한 기본적인 컨셉과 용어는 아래의 글에서 정리했다. All about git - 핵심 개념 정리 소스코드를 저장할 개념으로 학생때부터 git과 github을 꾸준히 사용했는데, 어느덧 거의 10년차가 되었다. 그렇다보니 주변에 git 에 대한 내용을 설명하는 경우가 많았는데, 사람들이 항상 혼란스 blog.joonas.io 그리고 commit 을 쌓기 위해 stage 컨셉에 대한 이해는 아래의 글에서 정리했다. All about git - 상태(status) 관리하기 git에 대한 개념과 용어가 헷갈리시는 분들은 아래 글을 참고해주세요. All about git - 핵심 개념 정리 소스코드를 저장할 개념으로 학생때부터 git과 github을 꾸준히 사용했는데, 어느덧 거의 10년차 blog.j..

git에 대한 개념과 용어가 헷갈리시는 분들은 아래 글을 참고하면 좋다. All about git - 핵심 개념 정리 소스코드를 저장할 개념으로 학생때부터 git과 github을 꾸준히 사용했는데, 어느덧 거의 10년차가 되었다. 그렇다보니 주변에 git 에 대한 내용을 설명하는 경우가 많았는데, 사람들이 항상 혼란스 blog.joonas.io 상태(status) git에는 파일의 상태(status)라는 개념이 있다. 아래의 명령어를 한번이라도 본 적이 있지만 자세히 생각해본적이 없다면, 이번 글은 무척 도움이 될 것이다. $ git status 이전 글에서 설명했듯이, git은 "파일이 변경된 기록"을 관리한다. 그리고 그 기록을 저장하는 단위이자 행위가 바로 커밋(commit)이다. commit은 실..

소스코드를 저장할 개념으로 학생때부터 git과 github을 꾸준히 사용했는데, 어느덧 거의 10년차가 되었다. 그렇다보니 주변에 git 에 대한 내용을 설명하는 경우가 많았는데, 사람들이 항상 혼란스러워 하는 부분을 이번 포스트 (어쩌면 시리즈)로 정리하고자 한다. Git vs. GitHub 가장 중요한 것은 git 과 github 의 차이부터 아는 것이다. 특히 수많은 IDE가 git의 기능을 지원하면서 github(또는 다른 서버)와의 연동 역시 당연하게 지원하다보니, 둘을 구분하지 못한 채 개발하는 경우가 많이 있었다. git 먼저, git은 온전히 "버전 관리 시스템(VCS; Version Control System)"이고 하나의 프로그램이다. 파일들의 변경 히스토리들을 기록하고 관리하는 것이 ..
1. 실제로 현재 git config 에 origin 이 없어서 발생하는 오류일 수 있다. 아래 명령어로 remote.origin 주소가 올바르게 설정되어있는 지 확인하고, git remote -v 없다면 아래와 같이 배포하고자 하는 git repository의 주소를 추가한다. git remote set-url origin https://.... 2. origin 설정은 분명 잘 되어있는데 안되는 경우 Failed to get remote.origin.url (task must either be run in a git repository with a configured origin remote or must be configured with the "repo" option). npm 과 관련한 모듈과 ..

정의 Dependency Inversion Principle (DIP; 의존관계 역전 원칙) 프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다. 더 자세히는 이렇게 말한다. 상위 계층(정책 결정)이 하위 계층(세부 사항)에 의존하는 전통적인 의존관계를 반전(역전)시킴으로써 상위 계층이 하위 계층의 구현으로부터 독립되게 할 수 있다. 1. 상위 모듈은 하위 모듈에 의존해서는 안된다. 상위 모듈과 하위 모듈 모두 추상화에 의존해야 한다. 2. 추상화는 세부 사항에 의존해서는 안된다. 세부사항이 추상화에 의존해야 한다. 의존 관계가 많을수록 코드의 변경이 잦아지는 것은 당연하다. 변경할 곳이 많다는 의미는 코드를 파악하고 수정하는 일이 무척 어렵다는 뜻이다. 의존 관계에 신경을 쓰는 이유는 이런 부분..

정의 Interface Segregation Principle (ISP; 인터페이스 분리 원칙) 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다. 위반 사례 이 ATM기는 총 3개의 모듈을 가지고 있는데, 어떤 거래(transaction)에 대해서 입금(Deposit), 출금(Withdrawal), 송금(Transfer) 모듈을 각자 만들었다. 각 모듈은 전문화된 기능을 가지기 위해 분리되었지만, 무언가 이상하다. 입금 거래 모듈은 입금만 하면 되는데, 위 구조와 같다면 코드가 이럴것이다. public class DepositTransaction extends Transaction implements UI { @Override public void requestDepositAm..

정의 Liskov Substitution principle (LSP; 리스코프 치환 원칙) 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다. 어떤 모듈 S가 모듈 T의 하위 모듈이라면, 속성의 변경없이 T를 S(상위)로 교체할 수 있어야 한다고 한다. 즉, 부모 클래스와 자식 클래스가 일관되어야 한다는 뜻이다. 위반 사례 이를 위반하는 대표적인 사례로는 원-타원 문제 (또는 사각형-정사각형 문제)가 있다. class Rectangle { private int width; private int height; public void setWidth(int width){ this.width = width; } public void setHeight(int he..
SOLID 원칙들은, 소프트웨어 작업에서 프로그래머가 소스 코드를 읽기 쉽고 확장하기 쉽게 될 때 까지 리팩토링하여 코드 냄새를 없애기 위해 쓰기 좋은 지침이다. 정의 Open/Closed Principle (OCP; 개방-폐쇄 원칙) 소프트웨어 요소는 확장에는 열려 있으나, 변경에는 단혀 있어야 하다. 모듈 중 하나를 수정했는데, 그 모듈을 사용하는 모든 모듈의 코드를 수정하는 일이 있으면 안된다는 뜻이다. 조금만 떠올려봐도 얼마나 끔찍한 일인 지 알 수 있다. 확장에 대해 열려 있다. 이것은 모듈의 동작을 확장할 수 있다는 것을 의미한다. 애플리케이션의 요구 사항이 변경될 때, 이 변경에 맞게 새로운 동작을 추가해 모듈을 확장할 수 있다. 즉, 모듈이 하는 일을 변경할 수 있다. 수정에 대해 닫혀 있..