'프로그래밍'에 해당하는 글 5건

팀 개발을 위한 Git, GitHub 시작하기
국내도서
저자 : 정호영,진유림
출판 : 한빛미디어 2020.01.06
상세보기

이전까지는 SVN을 써서 다른 사람들과 협업하는 프로젝트의 소스를 관리해왔었다.

하지만 지금 회사에서는 갑자기 Git을 쓴다고 이걸 사용해서 프로젝트 소스 관리를 해야 한다고 했다.

Git.... 많이는 들어봤지만 정확히 어떤건가라는 이해 없이 일단 사용하기 시작했다.

 

그 결과 수정되면 안 될 소스들까지 수정한 채로 원격 저장소에 올린적도 있고 충돌이 잔뜩 났는데 제대로 수정도 못한 채 올린 경험도 있다.

특히, 충돌 혹은 문제가 생겨서 진행이 안되고 메시지가 한 가득 뜨면 무슨 소리인지도 모르고 무척 당황했었다.

(Google 신의 도움을 받아서 해결하기도 했지만....)

 

물론 이 책을 읽기 전까지도 소스트리의 힘을 빌려서 Git을 쓸 수 있었지만 정확히 용어들이 어떤 것을 의미하는지 잘 모른 채로 계속 사용해왔다.

대충 어렴풋이 commit, pull, push, patch가 어떤 기능을 하고 있었는지 짐작은 하고 있었지만 설명하라고 하면 명확하게 설명할 수는 없었다.

그런 점에서 이 책을 읽는 것은 내게 정말 Git을 제대로 공부해볼 수 있는 기회(?)가 주어진 셈이었다.

그럼 하나씩 이 책의 구조와 장점을 뜯어(?)봐야겠다.

 

 

직접 들고 찍은 책 사진:)

 

먼저, 이 책의 가장 큰 장점은 기본편과 중급편으로 나뉘어져 있어서 Git을 처음 써보는 사람이라도 GUI의 힘을 빌려서 익힐 수 있게 되어있고 이미 Git을 많이 써봐서 좀 더 간지나게(?) 명령어만으로 익혀보겠다는 사람들을 위해 중급편에서는 CLI 환경에서 Git을 익힐 수 있게 나뉘어져 있다.

 

이처럼 기본적인 것 뿐만 아니라 조금 더 한 단계 더 나아갈 수 있도록 다양한 접근으로 개발자들에게 Git을 익힐 수 있게 해준게 이 책의 가장 큰 장점이다. (하지만 난 명령어가 한 번에 안 외워져서 여러번 봐야겠다... ㅠㅠ)

 

또한 기본편을 읽다보면 정말 하나하나씩 설명서를 읽는 것처럼 캡쳐와 쉬운 그림을 통해서 Git의 동작 원리를 잘 이해시켜주고 따라해볼 수 있는데 이 점이 정말 좋았다.

특히 이미 회사에서 남들이 다 Git lab에다가 올려놓은 소스들을 받아서 쓰는 것만 해본 나에게는 비록 완벽한 Code를 올린 것은 아니지만 책에 예제를 따라서 직접 GitHub에 올려보고 Request Pull을 날려보고 승인도 해본 점은 큰 경험이었다.

 

그리고 여기서 그치지 않고 기본편에서 기본적인 것 외에도 흔히 많이 쓰이고 도움이 많이 되는 핵심 꿀팁들을 알려줬는데 그 중에서 cherry-pick이 많이 들어보긴 했지만 어떻게 쓰는지 잘 몰랐는데 이번 기회에 직접 실습해볼 수 있어서 좋았다.

 

이렇게 기본편을 넘어서 중급편으로 CLI 환경에서 Git을 익혀보았는데 아직 하수여서 그런지 명령어를 통한 관리가 익숙치 않고 자꾸 헷갈리고 까먹었다.

중급편은 진짜 옆에 두고 계속 계속 보면서 익혀야 할 것 같다.

 

물론 요즘 Google에서 검색하면 정말 다양한 내용들이 잘 설명되어 있을 수 있겠지만 이 책처럼 하나씩 상세하게 그림과 캡처를 통해서 익히고자 하는 이에 이해를 돕는 것은 못 본 것 같다. 그래서 더 이해가 쉽게 될 수 있었고 이 책을 통해서 매번 공부해 봐야지 봐야지 하면서 안 하고 있던 Git 공부를 할 수 있는 좋은 기회를 가질 수 있어서 너무 좋았고 이 책을 쓰신 저자님들께도 다시 한번 감사의 인사를 드리고 싶다. :)

(거짓이 아니고 진심으로 이 책을 다 읽은 후, 책을 읽겠다는 다음 차례들이 줄 서고 있다...)

 

' > 프로그래밍' 카테고리의 다른 글

처음 시작하는 파이썬  (0) 2021.08.22
모던 자바스크립트 핵심 가이드  (0) 2021.06.20
실전 아파치 카프카  (0) 2021.04.11
혼자 공부하는 파이썬  (0) 2021.03.21
Flutter in Action  (0) 2021.02.21

WRITTEN BY
김치치즈스마일
세계정복!

,

NaN (Not a Number)란?

NaN이란 수치 연산을 해서 정상적인 값을 얻지 못할 때 출력되는 값.

예를 들어 1 - 'a'와 같이 숫자 1에서 'a'라는 문자열을 빼려고 할 경우 정상적인 결과를 얻을 수 없을 경우 NaN이 출력 됨.


WRITTEN BY
김치치즈스마일
세계정복!

,

프레임워크(Framework)란 무엇일까?

소프트웨어 어플리케이션이나 솔루션의 개발을 수월하게 하기 위해 소프트웨어의 구체적 기능들에 해당하는 부분의 설계와 구현을 재사용 가능하도록 협업화된 형태로 제공하는 소프트웨어 환경.

프레임워크는 명확하게 정의된 API를 가지고 코드를 재사용 가능한 형태로 구조화한다는 점에서 라이브러리와 비슷.

 

프레임워크의 장점

- 기반 구조를 그대로 재사용하고 비즈니스 로직과 관련된 부분을 추가적으로 구현하면 되기 때문에 빠른 어플리케이션 구축이 가능.

- 동일 프레임워크를 사용하는 어플리케이션들은 비슷한 뼈대 구조를 가지기 때문에 관리 및 테스트가 용이.

 

프레임워크와 라이브러리의 차이점

- 라이브러리에서는 호출 측이 전체 프로그램 제어 구조를 지정할 수 없지만, 프레임워크에서는 이러한 제어의 반전(inversion of control)이 가능.

- 라이브러리와 달리 프레임워크는 사용자가 선택적 오버라이딩이나 특정 기능을 수행하는 사용자 코드로 특수화하여 코드를 확장 재사용할 수 있음.

- 클래스 라이브러리의 경우 일반적으로 OOP의 구조를 사용해서 만들어진 재사용 구성품을 가리키며 목적과 사용법을 특별하게 한정하지 않음. 그러나 프레임워크는 단지 OOP를 사용해서 만들어진 라이브러리라고 하는 것뿐만 아니라 특정 목적을 달성하기 위한 어플리케이션의 미완성을 가리킴.

 

 

 

 

[참고] 네이버 백과사전

[참고] 성공과 실패를 결정하는 1%의 객체 지향 원리]

 

 

 

 


WRITTEN BY
김치치즈스마일
세계정복!

,

 

 

객체지향 소프트웨어를 설계하는 것은 쉬운 일이 아니다. 게다가, 재사용할 수 있는 객체지향 소프트웨어를 만드는 것은 더욱 힘든 일이다.

이처럼 힘든 일인 올바른 객체지향 소프트웨어를 만드는 것을 보다 쉽게 할 수 있게끔 도와주는 것이 있는데, 이것이 바로 디자인 패턴이다. 지금부터 디자인 패턴이 무엇인지 알아보자.

 

"각 디자인 패턴은 기존 환경 내에서 반복적으로 일어나는 문제들을 설명한 후, 그 문제들에 대한 해법의 핵심을 설명해 줍니다. 똑같은 방법으로 두 번 하지 않고 이 해법을 100만 번 이상 재사용할 수 있도록 말이죠."

- 건축가이자 패턴의 아버지, 크리스토퍼 알렉산더 -

 

디자인 패턴이란?

· 특정한 전후 관계에서 일반적 설계 문제를 해결하기 위해 상호교류하는 수정 가능한 객체와 클래스들에 대한 설명.

· 설계에서 얻은 세세한 경험들을 다른 사람이 응용하기 좋도록 자세히 기록한 것.

 

패턴에 들어가는 네 가지 요소

· 패턴 이름(Pattern name)

패턴 이름은 한두 단어로 설계 문제와 해법을 서술함. 패턴의 의도를 표현하고 설계에 대한 생각을 쉽게 함.

 

· 문제(Problem)

문제는 언제 패턴을 사용하는 가를 서술하며 해결할 문제와 그 배경을 설명함.

 

· 해법(Solution)

해법은 설계를 구성하는 요소들과 그 요소들 간의 관계, 책임 그리고 협력 관계를 서술함.

구체적인 부분을 제시하지 않고 문제에 대한 추상적인 설명을 제공하고 문제를 해결하기 위해서 클래스나 객체들의 나열 방법을 제공함.

 

· 결과(Consequence)

결과는 디자인 패턴을 적용해서 얻는 결과와 장단점을 서술함. 소프트웨어에서의 결과란 가끔 시간이나 공간 사이의 균형일 수도 있음. 즉, 시간을 중요한 요소로 볼 것인지 저장 공간의 효율을 중요한 요소로 볼 것인지에 따라 다른 설계 방법을 선택해야 함.

 

패턴 분류 기준

· 목적(purpose)

· 범위(scope)

 

목적

패턴이 무엇을 하는지 정의 하는 것.

크게 생성, 구조, 행동 중의 하나의 목적을 가짐.

 

· 생성

객체의 생성 과정에 관여하는 패턴.

· 구조

클래스나 객체의 합성에 관한 패턴.

· 행동

클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법을 정의하는 패턴.

 

범위

패턴을 주로 클래스에 적용하는지 아니면 객체에 적용하는지를 구분하는 것.

크게 클래스 패턴과 객체 패턴으로 구분.

 

· 클래스 패턴

클래스와 서브클래스 간의 관련성을 다루는 패턴.

관련성은 주로 상속이며 컴파일 타임에 정적으로 결정

 

· 객체 패턴

객체 관련성을 다루는 패턴.

런타임에 변경할 수 있으며 더 동적인 성격을 가짐.

 

 

[참고] GoF의 디자인 패턴

 

 

 


WRITTEN BY
김치치즈스마일
세계정복!

,

API 문서를 보다보면 다양한 용어들이 나온다. 그 중에서 Deep Copy와 Shallow Copy라는 용어가 나오는데 과연 그 둘은 어떤 의미로 쓰일까?

 

Shallow Copy

· 얕은 복사라는 의미인데 단순히 참조만 복사하는 것을 말한다.

· Shallow Copy를 할 경우, 원본이 변경되면 복사본도 같이 변경된다.

Deep Copy

· 깊은 복사라는 의미인데 단순히 참조만 복사하는 것이 아닌 원본과 같은 데이터를 저장하고 있는 새로운 객체나 배열을 생성하는 것을 말한다.

· Deep Copy의 경우, 원본이 변경되더라도 복사본은 완전히 독립적인 객체이므로 변경되지 않는다.

 

 


WRITTEN BY
김치치즈스마일
세계정복!

,