View
우당탕탕 사내 개발 스터디 참여기
정말 오랜만에 글을 쓴다. 회사를 다니다 보니 평일엔 일하고, 주말엔 취미생활을 하고... 문득 정신을 차려보니, 개발 공부 의지가 적어지고 게으른 내가 보였다. 이대로 가다간 영원히 쓸모없는 개발자가 될지도 모른다는 생각에 공부할 책을 찾아보고 있었는데 정말 기쁘게도 때마침 JS 버전의 리팩터링(2판) 사내 스터디를 모집한다는 슬렉이 올라왔다! 바로 참여하고 OT를 진행했다. 일주일에 100페이지 이상씩 읽어 5~6주 차엔 완독을 하는 것을 목표로 달린 사내 스터디, 내용이 정말 어렵고 힘들었지만 개인적으로 많은 도움과 자극을 받았다. 오늘은 책을 읽으며 그동안 몰랐었던 용어들을 정리하며, 간단한 독후감? 후기를 쓰려 한다.
아직도 어려운 개발용어들
개발자로 일하기 시작한 지 1년 반이 돼가는데도, 나는 아직도 낯선 용어들이 너무 많다. 어렴풋이 알고 있었던 이론, 기술들의 명칭을 몰라 이야기를 따라가지 못할 때도 있었다. 이번 리팩토링 책을 읽을 때도 똑같았다. 페이지 하나, 하나에 모르는 용어들이 기록되어 있어 매번 구글링을 하고, 기록하며 쫓아가야 했다. 자주 쓰지 않으면, 또 잊어버릴 용어들... 읽으면서 보았던 용어를 미래의 나를 위해 기록해 보자!
리팩터링
: 겉으로 드러나는 코드의 기능은 바꾸지 않으면서, 내부 구조 개선을 하는 방식의 소프트웨어 시스템 수정 과정. 많은 사람들이 다양하게 리팩터링을 정의하지만 책에서 정의한 내용은 이러하다. 악취를 제거하며 수정하는 과정에서도 기능하던 동작은 정상작동해야 하는 것이 리팩터링의 기준이다.
중첩함수
: 말 그대로 함수 안에 함수가 있다는 뜻, 바깥에 위치한 함수들과 달리 부모 함수의 변수를 자유롭게 읽을 수 있는 장점이 있다. 단일 함수로 해결해야 하는 경우에 많이 쓰인다고 한다.
동적언어와 정적언어
: 두 언어를 구분하는 방법은, 타입을 컴파일시에 결정하는지 아닌지이다.
정적언어는 변수에 들어갈 값의 형태에 따라 타입을 지정해줘야한다. 컴파일 시 타입에 맞지 않은 값이 들어있으면 에러가 발생한다. 정적언어의 장점으로는 타입에 대한 결정을 컴파일 시에 하기 때문에 속도가 빠르며, 타입에러도 초기에 발견할 수 있다는 것. 언어로는 C, C#, C++, Java가 있다.
int number = 3;
boolean test = false;
동적언어는 컴파일 시 타입을 결정하지 않고, 실행 시에 결정한다. 타입없이 변수에 선언하며 값을 지정하는 것! 단점으로는 배움의 초기에 모두가 겪어보는 타입에러가 쉽게 난다는 것이다. 언어로는 js(JavaScript), Python 등이 있다.
let number = 5;
let test = false;
※ 컴파일 : 사람이 이해하는 언어를 컴퓨터가 이해할 수 있는 언어로 변환해주는 과정, 원시코드(개발자작성코드) → 목적코드(컴퓨터이해가능언어)로 바꾸는것은 컴파일, 목적코드를 실행파일로 바꾸는것은 링크라고 하며, 두가지 기능을 동시에 하는것이 컴파일러다.
지역변수, 전역변수, 매개변수(파라미터), 인자
: 자주 나오는 용어들이라 알고있지만, 혹시 몰라 또 한번 기록하려한다!
지역변수는 한 지역내에서만 사용할 수 있는 변수다. 지역은 중괄호의 범위이며, 해당 함수내에서만 사용이 가능하다. 단, 초기화를 진행해주지 않으면 데이터가 꼬일 수 있으니 이 점 유의하자.
전역변수는 이름 그대로 모든 곳에서 사용할 수 있는 변수다. 영어로는 Global Variable이니 이해가 더 쉬울것이다. 프로그램 시작과 동시에 메모리 공간에 할당되고 종료될때까지 값이 존재한다. 그러나 지역변수와 달리, 전역변수는 코드가 길어질수록 스코프를 침해하며 코드를 오염시키거나, 중복 변수선언으로 예상하지 못한 값을 뱉어내며 유지보수가 힘들어질 수 있으니 주의해야한다.
인자와 매개변수(파라미터)는 같이 설명하는것이 좋은데, 인자는 함수 호출시 전달되는 값이며, 매개변수는 그 인자를 받아들이는 변수이다. 예시를 보면 이해가 더 편하다.
let a = 2500
function test (a) { <- a는 인자
let b = a <- b는 매개변수
console.log(a)
}
※ 파라미터를 한글로 번역하면 매개변수라는 뜻이며, 외부로부터 투입되는 데이터 라고 이해하면 된다, 수학에선 모수라고 불리며 어떤 시스템이나 함수의 특정한 성질을 나타내는 변수라고 한다.
변경함수, 조회함수, 명령함수, 질의함수
: API 리팩토링에서 나온 용어들인데, 데이터를 갱신하는 함수와 조회하는 함수를 명확하게 구분하기 위해 사용되는 용어이다.
변경함수는 데이터를 변경하는 함수, 조회함수는 데이터를 조회하는 함수, 명령함수는 동작을 수행하는 함수, 질의함수는 연산을 통해 값을 계산하여 반환하는 함수이다. 단 질의함수는 내,외부의 값을 변경시켜서 부수효과를 만들어선 안된다.
다형성과 단형성
: 다형성은 하나의 객체에 여러가지 타입을 대입할 수 있는것이며, 단형성은 하나의 객체에서 하나의 타입만 대입할 수 있는 것을 의미합니다. 책에서는 다형성이 객체지향 프로그래밍의 핵심이라 설명했다.
부수효과와 겉보기 부수효과
: 부수효과(사이드이펙트)는 내 자신에서 발생한 문제가 아닌, 외부상태에서의 영향을 받은 문제이다. 겉보기 부수효과는 책에서 처음 본 용어인데 외부세계에서 영향을 준 문제라고 한다. 네트워크통신이나 입출력변경 데이터 변형 등이 예시이다.
피호출함수, 호출함수
: 부르는 함수를 호출함수라고 하며, 부름을 당하는 함수를 피호출함수라고 한다.
제어 플래그
: 코드의 동작을 변경하는 곳에 사용되는 변수이며, 조건문을 검사하는 형태로 많이 쓰인다.
리터럴(Literal)
: 데이터 그 자체를 의미하며, 변수에 넣는 변하지 않는 데이터를 의미한다. 이 의미를 제대로 이해하기 위해서는 상수를 같이 알아야하는데, 상수(constant)는 변하지 않는 변수를 뜻한다. 상수안에 들어가는 데이터는 숫자 뿐만이 아니라, 객체나 클래스도 들어갈 수 있다. 참조변수를 상수로 지정할 때, 참조변수 메모르의 주소값이 변하지 않을 뿐, 주소가 가리키는 데이터는 변할 수 있다.
const test = 3;
* test는 상수(메모리위치), 3이 리터럴(메모리위치에 저장되는 값) *
※ 참조변수 : 한 객체와 다른 객체를 연결하는 수단으로 다른 객체에 대한 별칭이다. 참조변수는 비교할때도 값이 같은지 비교하는것이 아닌 참조하는 메모리 주소가 같은지를 비교한다.
보호구문
: 한쪽만 정상인 경우라면, 비정상 조건물을 검사 한 다음, 참인 경우에 함수에서 나온다. if절과 else절에 똑같은 무게를 두어 양 쪽 모두 똑같이 중요하다는 뜻을 전달할 수 있는 리팩토링 기법이다.
매직넘버/리터럴
: 프로그래밍에서 상수로 선언하지 않은, 계산적 의미를 가진 숫자나 문자를 그대로 표현한 것을 매직리터럴이라고 한다. 상수의 과용도 좋지않지만, 매직리터럴을 잘못 사용하게 되면 작성자 외에 다른 사람이 의도를 파악하기 어려워지니 정말 공용적으로 사용되는 값만 쓰도록 하자.
1차 완독을 하고...
이 책, js기반이라고 말하지만 작가가 자바를 좋아해서 그런지 자바에서 사용되는 용어들이 정말 많이 나온다. 나는 그동안 js에서 클래스를 거의 사용해 보지 않았는데, 책에서 클래스를 너무 많이 사용해서 그것부터가 어려웠다. 기술의 이해도가 떨어지면 아무리 좋은 글을 읽어도 소용이 없구나 싶었다🥲 타인 앞에서 리딩을 하며 지식을 나누기엔 나의 이론적 지식이 너무나도 부족한 것을 깨달았다. 이것을 보완하기 위해 이론적 책도 읽으며 공부를 해야겠다는 다짐 하게 되었다. 좀 더 공부를 하고 다시 읽으면 더욱 도움이 될것 같은 책이다. 아무것도 모르는 상태에서도 많은 도움을 주었으니! 특히 조건문 리팩토링 파트는 실무에서도 많은 도움이 되었다. 그동안 생각을 깊게 하지 않고 썼던 변수명까지도, 한 번 더 꼼꼼히 점검하며 쓰는 스스로가 되어 뿌듯하다. 앞으로도 스터디를 꾸준히 해야겠다는 생각이 들었던 시간이었다.
'Review' 카테고리의 다른 글
Vue router view :key="$route.fullPath" (0) | 2021.05.11 |
---|---|
vue apexcharts 다루기 (0) | 2021.05.03 |
javascript로 S3 엑셀 파일 업로드, S3 엑셀 파일 읽기 (0) | 2021.04.27 |
MAC에서 CORS policy 오류 해결하기 (0) | 2021.03.19 |
Learn Git Branching 정답 - 2편 (0) | 2021.03.04 |