방학 불태우기 1

김민석·2021년 7월 19일
0

방학

목록 보기
1/16

자바스크립트 자료형

자바스크립트는 동적(dynamic) 언어로 변수의 타입을 미리 선언할 필요가 없다. 따라서 변수를 선언한 후에 할당하는 값에 따라 타입이 결정되는 것이다.

또한, 이런 특징 때문에 이미 값이 할당되었 더라도 다른 값을 할당할 수 있다.

데이터 타입

데이터 타입으로는 기본적으로 boolean, Null, Undefined, Number, String, Symbol이 있다.

Number의 경우 64비트 부동소수점 형식으로, 모든 수를 실수로 처리한다.

Undefined의 경우 할당된 값이 없을 때, 즉 변수만 선언했을 때의 초기 값이다.

Null은 값이 없음을 나타내기 위해 할당해 주는 값이다.

참고 : https://curryyou.tistory.com/182

얕은 복사, 깊은 복사

자바스크립트에서 인자를 전달 할 때 어떤 방식으로 진행되는 지 알아보자.

  • call by value
    일반적으로 자바스크립트는 call by value를 사용한다. 숫자나 문자 등의 원시 데이터의 경우 복사하여 데이터를 할당 한 후 복사본을 바꾸더라도 원본에서는 변화가 일어나지 않는다.
var a = 100;
var b = a;
b = 10;

이런 식으로 코드를 구현한 경우 a=100, b=10의 값을 갖게 된다.

함수의 파라메터로 넘기는 값 역시 원시 데이터일 경우 함수 내에서 수정이 되더라도 원본 값은 바뀌지 않는다.

  • call by reference
    데이터의 공간을 참조하여 수정한 경우 원본 데이터 역시 수정된다. 자바스크립트에서 객체의 경우 call by reference를 사용한다.
var arr1 = [1,2,3,4];
var arr2 = arr1;
arr2[0] = 0;

위와 같은 방식으로 코드를 구현한 경우 arr1과 arr2 모두 [0,2,3,4]의 값을 갖게 된다.

얕은 복사

얕은 복사는 복사본을 만들어 둔 척 하는 것을 의미한다.

원시 데이터의 경우 call by value를 사용하기 때문에 복사본을 수정하더라도 원본에는 영향을 끼치지 않는다.

하지만 객체의 경우 call by reference이기 때문에 복사본을 수정했을 때 원본 역시 바뀌게 된다.

객체에서 값을 공유하는 것이 아닌 독립적으로 존재하도록 하기 위해 깊은 복사를 사용하는 것이다.

깊은 복사

앞서 말했듯이 객체가 독립적으로 존재하도록 하여 복사본을 수정하여도 원본은 그대로 유지되도록 하는 것이다.

방법으로는 여러가지 방법이 있다.
1. Array.prototype.slice()를 활용하여 원본 배열을 복사하여 새로운 배열에 할당해 준다.
2. 재귀를 활용하여 모든 요소를 복사하는 함수를 정의하여 사용한다.
3. JSON.pars, JSON.stringify를 이용하여 복사한다.

참고 : https://bbaktaeho-95.tistory.com/37

배열과 find()

배열 내의 특정 요소를 찾기 위해 Array.prototype.find() 함수를 이용할 수 있다.

만약 배열 내에 찾고자 하는 값이 없다면 undefined를 반환한다.

find() 외에도 코드를 좀 더 간결하고 성능이 좋도록 하는 여러 배열 메소드들이 존재한다.

참고 : https://www.specialcast.io/paper/d8a6909c-114d-4aa2-8e2a-566b41deb880

sort()와 compareFunction

C++에서의 sort() 함수는 해당 데이터 타입 끼리 비교를 한다. 예를들어 sort 대상이 되는 벡터가 정수값을 갖는다면 정수 끼리의 크기비교를, 문자열을 값으로 갖는다면 문자열 끼리의 크기비교를 해 준다.

하지만 자바스크립트에서는 sort()를 비교함수 없이 사용했을 경우 인자를 문자열로 변환하여 문자열 끼리의 대소 비교를 하게 된다.

예를들어 [2, 3, 10, 5]를 인자로 갖는 배열이 있을 때 sort()를 그냥 사용하게 되면 [10, 2, 3, 5] 로 정렬이 되게 되는 것이다.

따라서 compareFunction을 정의해 줘서 경우에 따라 올바른 기준으로 정렬되도록 해야 한다.

compareFunction(a,b)의 값이 음수라면 a를 b보다 앞에 오게 정렬한다. 반대로 양수라면 b를 a보다 먼저 오도록 한다. 만약 값이 0이라면 위치를 변경하지 않는다.

var arr = [1,5,3,9,6];
arr.sort(function(a,b){
	if(a>b) return 1;
    if(a<b) return -1;
    return 0;
});

위와 같은 방식으로 비교함수를 작성하게 된다면 문자열, 숫자 상관 없이 오름차순으로 정렬할 수 있다.
(문자열의 경우 아스키 코드에 따라 대소 관계 성립됨)

참고 : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

git

여러 사람이 협업하는 경우, 혹은 작성한 데이터를 저장하기 위해 원격 저장소를 사용한다. 기본 명령어와 개념들을 알아보자.

git init

저장소를 초기화 하는 단계이다. 저장소로 사용하고자 하는 폴더로 이동한 후 git init 명령어를 통해 초기화 한다.

명령어를 수행하면 .git이라는 폴더가 생성되는데, 이 폴더를 통해 저장소를 관리한다.

git status

깃의 상태를 보기 위해 git status 명령어를 활용할 수 있다.

수정된 파일이나 생성된 파일 등 현재 폴더의 변경 상태를 볼 수 있다.

git add filename

변경된 파일 중 저장하고 싶은 부분을 선택하여 임시저장 하는 단계이다.

변경된 파일을 저장소에 저장하기 전에 저장할 수 있는 상태(임시저장)로 만들어 준다.

git commit

폴더의 변경 내용을 저장하는 단위를 commit이라 한다. git add를 통해 임시저장된 상태에서 commit을 만들 수 있다.

커밋의 내용을 설명하기 위해 -m 옵션을 통해 메세지를 입력할 수 있다.

git commit -m "커밋 메세지" 와 같이 사용한다.

git push

원격 저장소에 commit을 push 하는 것이다.

git push origin 자기branch 명령어를 통해 사용 가능하다.

git 내부 동작 과정(add, commit)

깃의 저장소 구조는 working directory, staging area, head repository로 구성되어 있다.

우리가 작업하는 폴더를 working directory라 부르고, 커밋을 하기 전 임시저장하는 영역을 staging area라고 부른다.

즉, working directory에서 수정하거나 생성산 파일을 add를 통해 staging area에 임시저장 하고, staging area에 임시저장된 내용들을 commit을 통해 저장소에 커밋 하는 것이다.

협업에서 git 활용하기

여러 사람이 협업을 할 때 동일한 소스코드를 서로 공유하고 수정하게 된다.

서로 다른 작업을 동시에 수행하고, 서로의 영향을 받지 않도록 하기 위해 branch를 사용한다.

브랜치를 만들어 서로에게 영향이 가지 않도록 하고, 동시에 진행할 수 있다. 또한 여러 브랜치들을 병합하여 하나의 브랜치로 모을 수 있다.

다음과 같은 과정을 통해 프로젝트에서 맡은 임무를 수행하고 플로젝트에 적용시킬 수 있다.

fork

프로젝트의 저장소를 자신의 저장소로 fork한다.

프로젝트의 저장소를 자신의 저장소로 복제하는 것을 의미하는데, 원본과 연결되어 있기 때문에 원본의 수정이 일어나면 복제한 저장소에도 반영되는 것을 의미한다.

또한 복제한 저장소의 내용을 원본에 적용하기 위해 pull request를 진행하여야 하는데, 이 부분은 뒤에서 살펴본다.

git clone

fork한 저장소를 자신의 컴퓨터에 복사하는 것을 의미한다.

git clone https://github.com/{본인 GitHub Username}/{저장소이름} -b {브런치네임} --single-branch

명령어를 통해 clone 할 수 있다.

그리고 해당 저장소에서 코드 수정 등 여러 작업을 수행한다. 그 과정에서는 위에서 설명한 여러 명령어 들을 사용한다.

마무리가 되었다면 git push를 통해 자신의 저장소에 올린다.

pull request

앞서 설명했듯이 자신의 저장소에서 변경된 내용을 원본 저장소에 반영하기 위해 pull request를 하는 것이다.

push 가 완료되면 github의 웹상에 Compare & pull request 버튼이 활성화 되는데, 이 버튼을 클릭하여 메세지를 작성한 후 요청을 보내는 것이다.

그리고 이 요청을 받은 원본 저장소의 관리자가 코드 변경 내역을 확인한 후 병합을 하는 것이다.

참고 : https://velog.io/@imacoolgirlyo/Git-fork%EC%99%80-clone-%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90-5sjuhwfzgp
https://wayhome25.github.io/git/2017/07/08/git-first-pull-request-story/

branch 전략을 사용하여 협업하는 이유

여러명이서 협업을 하게 된다면 서로 규칙을 정하여 git을 사용하게 된다.

또한 여러 버전으로 나누어 프로젝트를 나누어 관리함에 있어서 branch를 사용하면 훨씬 더 편하게 관리할 수 있다.

git flow, github flow, gitlab flow 등의 전략이 존재한다.

  • git flow
    git flow의 경우 기본 5가지 branch를 활용하는 전략이다. master, develop 브런치를 중심으로 흘러가며 필요 시 새로운 기능을 추가하는 feature 브런치, 릴리즈를 위한와 버그 수정을 위한 release, hotfix 브런치 등을 사용한다.
    브런치가 많아 복잡하다는 단점이 있다.

  • github flow
    git flow를 깃허브에서 좀 더 사용하기 쉽게 한 것이다.
    브런치 전략이 단순하고, 처음 git을 접하는 사람에게 좋다는 장점이 있다.

참고 : https://ujuc.github.io/2015/12/16/git-flow-github-flow-gitlab-flow/
https://uxgjs.tistory.com/183

profile
김민석의 학습 정리 블로그

0개의 댓글