리팩토링 관련 교과서라 불리는 서적

 

리팩토링 - 마틴 파울러 지음

 

리팩토링

개발자가 선택한 프로그램 가치를 높이는 최고의 코드 관리 기술마틴 파울러의 『리팩터링』이 새롭게 돌아왔다.지난 20년간 전 세계 프로그래머에게 리팩터링의 교본이었던 이 책의 1판은, 기

book.naver.com

 

 

 

 

 

리팩토링 관련 가장 잘 정리되어 있는 블로그 글

 

 

Code Review 티스토리 블로그

 

리팩토링이란 무엇인가?

Refactoring 나쁜 디자인의 코드를 좋은 디자인으로 바꾸는 방법 참고도서 : 리팩토링 (마틴 파울러 지음) 1. 리팩토링이란 무엇인가?  리팩토링은 외부동작을 바꾸지 않으면서 내부 구조를 개선하

codereview.tistory.com

 

위 블로그에 정리된 내용들

 

  • 리팩토링이란 무엇인가?
  • 리팩토링을 해야 하는가?
  • 리팩토링을 언제 해야 하는가?
  • 리팩토링을 할 때 문제점
  • 어떤것을 리팩토링 해야 하는가?

 

 

리팩토링에 대한 쉬운 설명과 실습영상(생활코딩)

 

 

생활코딩(리팩토링)

 

리팩토링(refactoring) - 생활코딩

소스코드 변경사항

opentutorials.org

 

 

입문자도 이해하기 쉽게 리팩토링을 설명하는 강의가 위 링크(생활코딩)에 있습니다.

 

간결한 설명뿐만 아니라 간단한 코드 예시를 통한 실습 영상이 한 영상에 담겨있습니다.

 

 

 

블로그 글으로는 부족하다고 생각 하시는 분들은, 위 사이트 강의를 시청하시는 걸 추천드립니다.

 

 


참고자료

Code Review 티스토리 블로그

 

생활코딩(리팩토링)

반응형

디버깅이란?

 

스크립트 내 에러를 검출해 제거하는 일련의 과정을 의미합니다.

모던 브라우저와 호스트 환경 대부분은 개발자 도구 안에 UI 형태로 디버깅 툴을 구비해 놓습니다.

디버깅 툴을 사용하면 디버깅이 훨씬 쉬워지고, 실행 단계마다 어떤 일이 일어나는지를 코드 단위로 추적할 수 있습니다.

 

 

 

‘디버깅’이라는 용어는 여러 다양한 것을 의미할 수 있지만 대부분의 경우 코드에서 버그를 제거하는 것을 의미합니다. 

 


참고 자료

 

모던 자바스크립트 튜토리얼

 

Chrome으로 디버깅하기

 

ko.javascript.info




반응형

 

 

우리가 프로그래밍을 공부하면서 대부분 자바스크립트(JavaScript), 파이썬(Python)과 같은 언어들을 먼저 배웁니다.

 

 

이 과정에서 정말 중요한 웹에대한 기초를 스킵하는 경우가 있습니다.

확실한 것은 분명히 다시 기초를 배우러 돌아간다는 것입니다.

 

왜냐하면 웹이 어떻게 작동 하는지 알 수 없기 때문입니다.

 

 

* 파란색 글씨를 클릭 시, 단어의 자세한 정보를 볼 수 있습니다.


 

웹브라우저가 하는 일(읽는 방향: 왼쪽 ▶ 오른쪽)

웹브라우저(Web Browser)

HTML 문서와 그림, 멀티미디어 파일등 월드 와이드 웹(WWW)을 기반으로 한,

인터넷의 컨텐츠를 검색 및 열람하기 위한 응용 프로그램의 총칭.

대표적인 웹 바라우저로 크롬, 파이어폭스, 인터넷 익스플로어, 사파리 등

 

 

웹페이지(Web Page)

온라인으로 볼 수 있는 단일 문서 또는 텍스트, 이미지, 비디오로 가득찬 페이지.

파이어폭스, 구글 크롬, 오페라, MS 익스플로러나 엣지, 애플의 사파리 같은 웹 브라우저에서 보여지는 문서.

이런 것들을 단순히 "페이지(Page)"라고 하기도 한다.

 

 

서버와 클라이언트(출처: 생활코딩)

 

웹서버(Web Server)

인터넷에 웹사이트를 호스팅하는 컴퓨터.

HTTP request를 받고 HTML, CSS, Javascript, Image 등의 정적인 정보를 반환하는 역할.

 

 

 

 

 

클라이언트(Client)

트워크가 연결되어있는 서버로부터 정보를 제공받는 컴퓨터.

클라이언트와 대비되는 개념은 서버(Server)가 있는데 클라이언트는 요청하고, 서버는 응답하는 관계.

 

 

 

 

인터넷은 어떻게 작동될까요?

 

라우팅(Routing): 어떤 네트워크 안에서 통신 데이터를 보낼 때 최적의 경로를 선택하는 과정.

패킷(packet): 네트워크 전송의 용량 단위. 본디는 우편 용어로, Package(화물)와 Bucket(덩어리)의 합성어.

 

 


참고자료

 

MDN 모질라

 

생활코딩

반응형

 

MDN mozilla는 현직 개발자들이 주로 정보를 얻는 사이트라고 해요.

저는 이 웹사이트에서 HTML, CSS, 자바스크립트(JavaScript)를 주로 참고하고 있어요.

 

 

 

MDN사이트를 몰랐을 때는 다른 사이트에서 정보를 얻고 있었어요.

 

하지만 MDN을 사용하고 나서부터는 이 사이트만 이용하게 되네요.

현직 개발자들이 주로 사용하는 이유가 있다는 걸 느꼈어요.

 

 


 

 

 

 

 

코드가 직접 작동하는 예시를 보여줍니다.

 

정말 가장 큰 이점이에요.

예시가 없어 기능을 사용하면 어떻게 보일지 모르는 경우가 많았어요.

 

예시를 보면 "아 이렇게 작동하는구나"라고 알 수 있어요.

그러면 내가 만드는 것에 어울릴지 쉽게 알게되죠.

 

 

다른 사이트도 많이 봤지만 이 정도로 상세하게 나와있는 곳은 못 봤어요.

 

 

 

 

 

 

 

 

 

 

 

 

위 기능에 대한 사이트의 경고

 

 

사용하지 않는 기능들을 알려준다.

 

 

점점 발전을 하면서 도태되어 사용하지 않는 기능들이 있어요.

 

그런 기능들을 이 사이트는 친절하게 알려줘요.

 

곧 사라지는 기능이 있는데 그것을 사용하면 나중에 유지보수를 해야 하는 번거로움이 생겨요.

그런 수고를 덜어주는 정말 좋은 정보라고 생각해요.

 

 

 

 

 

 

 

 

 

 

 

 

 

한국어 지원

 

100%는 아니지만 일부분 한국어를 지원합니다.

설령 영어로 되어있어도 예시가 있어서 이해하는데 큰 문제는 없다고 생각되네요.

 

그런데 정말 많이 사용하는 기능들은 대부분 한국어 변역이 되어있어요.

 

 

 


 

이 외에도 다양한 이점들이 있어요.

 

코딩을 할 때 한번 참고해보면 왜 사용하지는 알게되는 사이트에요.

 

계속 방문하게 되죠.

반응형

프로그래밍 관련 공부를 하다가 엄청난 난관에 봉착을 했어요.

 

 

 

 

그것은 바로 '리눅스'라는 것인데요.

친절한 윈도 운영체제에 익숙해서 더욱 적응하기 힘들었어요.

 

제가 공부하면서 듣는 강의에서는 거의 대부분 리눅스를 사용하고 있었어요.

그래서 강의를 들으면서 막히는 부분이 꽤 많았죠.

 

아예 리눅스를 따로 공부하는 게 좋겠다고 생각하다 좋은 강좌를 발견했어요.

 

 

www.youtube.com/watch?v=tPWBF13JIVk

 

유튜브 채널 얄팍한 코딩 사전(얄코)에 있는 강의예요.

 

정말 마음에 드는 것은 비개발자도 이해하기 쉽게 전문용어들을 풀어 알려주는 거예요.

우리가 쉽게 접할 수 있는 것들을 예시로 풀어서 알려주는 강의예요.

 

 

 

www.yalco.kr/35_linux/

 

가장 쉽게 배우는 리눅스

어려운 프로그래밍 개념들을 쉽게 설명해주는 유튜브 채널 '얄팍한 코딩사전'. 영상에서 다 알려주지 못한 정보들이나 자주 묻는 질문들의 답변들, 예제 코드들을 얄코에서 확인하세요!

www.yalco.kr

리눅스 관련 명령어들도 얀코 사이트에 잘 정리되어 나와있어요.

 

 

아래 글은 제가 영상을 보고 중요하다고 생각하는 내용만 정리한 글이에요.


 

GUI(Graphic User Interface)

 

  • 모든 요소들이 화면에 그림으로 나타남
  • 일반인(개발자가 아닌) end-user를 대상으로 만든 운영체제
  • 개발자가 만들어 놓은 기능을 사용만 하면 되도록 환경 제공
  • 해당 운영체제 윈도, Mac OS, 안드로이드, ios

 

 

 

 

 

CLI(Command Line Interface)

 

Linux 같은 운영체제

 

 

 

 

 

리눅스(Linux)

 

  • 오픈소스 운영체제로 공짜이다.
  • 설계도 코드도 마음껏 볼 수 있다(개조도 가능).

 

 

 

대표적인 예로 안드로이드가 있다.

리눅스를 일반인 스마트폰 사용자들이 편리하게 사용할 수 있는 모바일 OS로 개조했다.

 

 

 

 

 

개발자들이 맥을 선호하는 이유 중 하나

 

  • 맥이 리눅스와 호완성이 좋다.
  • 둘 다 UNIX라는 운영체제에서 파생되었고 공통점이 많다.

 

 

 

*명령어 사용법 및 설치법은 얄코 채널 영상 참고

 

 

반응형

 

 

코딩을 하다 보면 정말 많은 에러들을 보게 되죠.

혼자 해결하면 좋겠지만 하기 힘든 것들이 더 많은 것 같아요.

 

 

그래서 다양한 커뮤니티에 질문글을 올리는 경우가 많아요.

다수의 사람들 중에 이미 나와 같은 문제를 겪고 해결한 사람이 있기 때문이에요.

그런데 어떻게 질문을 해야 빠르고 정확하게 답을 얻을 수 있을까요?

 

제목에 적었듯이 3가지 내용은 무조건 넣어 주시는 게 좋아요.

 

 

 

 

 

 

 

 

1. 프로젝트의 목적 혹은 구현할려는 것

 

예를 들면 "파이썬 언어를 사용해 Beautifulsoup으로 웹사이트 크롤링을 했는데,

추출한 데이터를 CSV 파일에 넣으려고 하는데 문제가 발생했어요."

 

사용한 언어는 필수로 적어 주셔야 해요.

되도록이면 제목에 적어 주시면 쉽게 도움을 받을 수 있어요.

 

 

 

 

 

 

 

 

 

2. 내가 시도한 것 그리고 무엇이 안되는지

 

 

1번에 있는 내용들을 잘 적었다면 내가 시도한 것들이 무엇인지 적어 조시면 돼요.

 

보통 작성한 코드를 적는 게 좋습니다.

스크린숏을 업로드하는 방법도 있지만, 답변자가 테스트해보기 편하게 텍스트로 된 게 좋겠죠?

 

그리고 파일을 업로드하는 방식은 비추천 드려요.

바이러스, 보안 문제로 프로그래머분들은 검증안된 파일은 다운받는걸 꺼려한다고 하네요.

 

 

 

 

 

 

 

3. 에러(Error)가 어떻게 출력되었는지

 

 

마지막으로 코드를 작성하면서 발생한 에러를 적는 것이에요.

코드 전체를 읽지 않고도 에러코드만 보고 정확한 답변을 주시는 경우도 많기 때문이에요.

 

보통 이런 경우는 뭔가 빼먹고 적는 경우가 많더라구요.

예를들면 세미콜론 혹은 콤마를 안 기입해서 생기는 문제들 처럼 말이에요.

 

 

 

 


구글링을 하면서 보면 이 질문은 너무 두루뭉실 한데? 라는 것들이 있어요.

보통 보면 그런 글들은 위 3가지 요소들이 빠져 있는 경우가 많아요.

 

코드만 올리거나 에러만 올리거나 등등

"파이썬에서 print가 안돼요ㅠ"

 

이런 질문은 대부분 답변이 안달려 있는 경우가 많았어요.

 

 

프로그래밍관련 내용은 정말 광범위해서 두루뭉실한 질문을 정말 답이 없죠.

반응형

프로그래머는 싫더라도 구글을 사용해야 한다는 것을 알았습니다.

 

설령 구글이 처음에는 싫더라도 코딩을 하다 보면 정말 좋다는 것을 느끼실 것입니다.

 

 

 

 

 

'구글 없으면 코딩 어떻게 하지?'

이런 말이 나올 정도니까요.

 

 

 

그 이유는 상당히 많습니다.

오늘은 3개만 다뤄 보려고 해요.

 

 


1. 방대한 정보량

 

 

 

위 사진을 보면 우리나라에서 점유율 1위인 네이버와 전혀 다른 검색 결과를 볼 수 있어요.

C language(C언어)로만 검색했는데 70억 개의 문서가 있네요.

 

 

 

 

 

 

 

 

 

 

 

2. 원하는 내용을 쉽게 찾을 수 있다.

 

 

구글 검색엔진은 내가 검색한 내용 혹은 질문에 가장 맞는 정보를 상단에 배치해줘요.

 

 

 

이에 반해 네이버는 거의 광고를 최상단에 배치해요.

가끔씩 블로그에 유용한 정보가 있지만 대부분은 학원, 강의 광고입니다.

 

 

 

 

 

 

 

 

 

3. 프로그램 언어를 만든 사람들은 영어를 사용한다.

 

 

프로그램 언어를 만드는 개발자들은 대부분 영어를 사용합니다.

그리고 그들이 영어로 적은 개발 관련 정보는 구글에서 찾을 수 있습니다.

 

개발자들이 새로 업데이트한 정보들도 구글에서 찾을 수 있습니다.

 

구글을 너무 쓰기 싫어도 무조건 써야 되는 것 입니다.

 

반응형

저와 같이 입문자 프로그래머들은 비슷한 고민을 하고 계실 거라 생각합니다.

수많은 글과 영상들이 여러 언어를 추천하고 있습니다.

 

 

취업을 하려면 자바를 배워라,

다른 언어보다 배우기 쉬운 파이썬을 배워라,

튼튼한 기초가 되는 C언어를 배워라 등등

 

 

제가 방황한 끝에 정말 좋다고 생각하는 두 개의 영상을 결국 찾았습니다(아래 링크의 두 개의 영상).

 

두 개의 영상을 보시고 답을 찾으신 후 방향성을 잡으시면 좋겠습니다.

 

* 두 개의 영상 모두 현업에 계신 분들의 영상입니다.




* 출처: 홍정모의 실리콘밸리 도전기 유튜브 채널(https://youtu.be/2Jl5MQTOces)

 

 

 

  • 특정 언어를 기준으로 자신의 진로를 생각

  • 언어가 아닌 어떤 분야, 업종에서 일할 거냐가 중요

  • 하고 싶은 언어를 선택하고 그다음 그 분야에 알맞은 언어를 다시 배우기

  • C언어 계열을 미리 공부하면 다른 언어 배우는 속도도 훨씬 빠름

  • 기초를 튼튼히 키우고 필요에 따라 자신이 얼마든지 적응할 수 있는 능력 강조

 

 

 

 

 

 

 

 

 

 

 

 

출처: 노마드코더 유튜브(youtu.be/p_v_js0mxVc?t=268)

 

 

  • 처음 배워야 할 언어에는 정해진 답이 없음

  • 질문자의 목표(취업, 취미, 프리랜서 등등)와 상황을 모르기 때문

  • 답을 해주기 위해서는 충분한 배경지식이 필요

 

노마드코더가 설명하는 5가지 언어(각 언어 클릭 시 유튜브 링크로 이동)

 

  1.  C와 C++언어 [0:38]

  2.  Java(자바) [1:26]

  3.  Python(파이썬) [2:27]

  4.  JavaScript(자바스크립스) [3:23]

  5.  php [4:28]

 

 


혼자 고민하면 시간이 많이 낭비된다는 생각을 합니다.

더욱 초조하고 불안해지죠.

 

저는 현업에 직접 종사하시는 분들의 영상을 보면서 많이 도움이 되었습니다.

 

 

반응형

패턴 인식은 컴퓨팅 사고 4가지 구성 요소 중 하나입니다.

 

 

컴퓨팅 사고(Computational Thinking)의 4가지 구성요소

1. 분해(Decomposing)   2. 추상화(Abstraction)   3. 패턴인식(Pattern recognition)   4. 알고리즘(Algorithms)

 

 

 

 

 

패턴인식이란

주어진 문제를 분해하기 위한 혹은 분해된 문제들의 유사성을 찾기 위한 과정.

유사한 문제들은 동일한 해결책 적용이 가능합니다.

 

완벽하게 동일한 모양의 공ㅌ통점을 파악하는 것도 중요하지만,

어느 정도 비슷한 모양의 공통점을 파악하는 것이 더 중요.

 

'유사한 패턴을 어느 범주까지 같은 패턴으로 인식할 것인가'

 

 

 


개인적으로 패턴인식은 정말 중요하다고 생각합니다.

일상에서 패턴을 인식하는 능력이 있으면 그것을 통해 서비스를 만들 수 있기 때문입니다.

 

예시로 매일 똑같은 루트의 대중교통을 이용하는 것도 하나의 패턴입니다.

이런 패턴을 빠르게 인식하고 편리한 서비스로 만들어서 이익을 창출하고 있습니다.

 

 

 

 

반응형

컴퓨팅 사고는 컴퓨터가 사고하는 방법을 우리가 새로 배우는 것이 아닙니다.

과거에 인간들은 문제 해결을 위해 컴퓨팅 사고를 사용하고 있었습니다.

 

 

컴퓨팅 사고라는 용어는 카네기 멜론 대학의 자넷 윙(Jeannette M.Wing) 교수가 정의했습니다.

자넷 윙 교수는 2006년 '컴퓨팅 사고'가 현대인이 갖춰야 할 핵심 역량이라고 소개했습니다.

 

 

 

 

 

컴퓨팅 사고(Computational Thinking)의 4가지 구성요소

1. 분해(Decomposing)   2. 추상화(Abstraction)   3. 패턴인식(Pattern recognition)   4. 알고리즘(Algorithms)

 

 

 

 

오늘은 위의 4가지 요소 중 분해를 다뤄보려고 합니다.

 

 

 

 

 

분해

분해란 말 그대로 복잡한 문제를 풀기 쉬운 단위로 잘게 나누는 것입니다.

단순히 잘게 나누는 게 아니라 해결하기 쉬운 단위로 변형하는 데 있습니다.

 

분해를 안 해도 쉬운 문제이면, 굳이 안 해도 됩니다.

 

다양한 분해 방법들이 곳곳에서 사용되고 있습니다.

 

 

 

 

 

 

 

 

첫 번째, 문제 진행 순서에 따라서 분해(절차 분해)

 

절차 분해는 앞 단계가 완료되면 다음 단계로 넘어가는 형식으로 진행됩니다.

앞 단계의 결과물이 다음 단계에 중요한 자원으로 사용됩니다.

그래서 앞 단계를 건너뛰고 진행하면 문제가 생길 수 있습니다.

 

절차 분해는 장난감을 조립하거나 분해할 때 사용될 수 있습니다.

올바른 절차를 따르지 않으면 장난감이 고장 날 수 있습니다.

 

 

 

 

 

 

두 번째, 문제의 단위를 소분류로 분해

 

소분류로 분해는 일의 분업화로 이해하면 쉽습니다.

 

예를 들어 휴대폰을 만든다고 하면 조립은 순서를 지켜야 합니다.

하지만 부품을 생산하는 과정은 소분류로 나눠도 문제가 없습니다.

그 이유는 분류를 나눠도 시간적으로 서로 종속되어 있지 않기 때문입니다.

 

이런 방식은 일을 더욱 효율적으로 만들어 주게 됩니다.

 

공장에서는 소 분류된 부품이 동일한 시간에 생산되는 걸 중요시 생각합니다.

그래야 부품을 동시에 조립 하는 생산라인을 만들 수 있기 때문입니다.

 

 

 

 

 

 

 

세 번째, 문제를 뭉쳐서 해결

 

문제의 분해는 엄밀히 말하면 문제를 해결 가능한 형태로 변형하는 것입니다.

해결하기 적절한 단위로 만든다고 이해하는 것이 좋을 것입니다.

 

세 번째 방법은 프로그래밍에서 함수 기법에서 많이 적용하는 방식입니다.

클래스와 객체라는 개념이 있습니다.

 

자바와 같은 객체 지향 프로그래밍 언어에서 많이 사용하는 개념입니다.

 

 

 


분해의 과정은 단순히 나누는 과정으로 보기 어렵습니다.

자료를 분석하고 논리적으로 조직화하는 과정이라고 보시는 게 좋습니다.

 

 

 

 

 

 

* 참고 도서

- 논리적 문제 해결을 위한 컴퓨팅 사고 (저자 김두진)

반응형

+ Recent posts