글을 작성하기 전, 왜 우리는 Clean Code를 학습해야하며, 어떠한 마음 가짐으로 임해야하는지 알아보겠습니다.

 

<나쁜 코드로 치르는 대가>

프로젝트 초반 나쁜코드를 작성하며 번개처럼 속도를 낸다면, 시간이 지남에 따라 개발속도는 늦어집니다.

분명, 초반 개발속도는 매우 빠르고 힘차게 나갈지라도, 1-2년 후 결국 굼뱅이처럼 기어갈 수 밖에 없습니다.

프로젝트의 규모가 커지고 코드들이 얽히고 설킨 상황에 개발자가 코드를 '해독'해서 코딩을 한다면 분명 생산성에

문제가 있을 것 입니다.

 

 

<어떠한 마음가짐으로 코드를 작성해야 하는가?>

저자는 미국 보이스카우트가 따르는 간단한 규칙이 개발자들에게도 유용하다고 설명하고 있습니다.

 

           캠핑장은 처음 왔을 때보다 더 깨끗하게 해놓고 떠나라.

 

체크아웃할 때보다 좀 더 깨끗한 코드를 체크인 한다면 코드는 절대 나빠지지 않습니다. 

사소하게 변수명 하나 또는 약간의 중복제거와 같은 간단한 코드정리가 쌓이다 보면 결국 프로젝트의 코드는 클린해질 것 입니다.

 

 

<의미 있는 이름>

 

1. 의도를 분명히 밝혀라

   변수나 함수 그리고 클래스 이름은 다음과 같은 굵직한 질문에 답해야 합니다.

     - 변수(혹은 함수나 클래스)의 존재 이유

     - 수행 기능

     - 사용 방법

   

   따로 주석이 필요하다면 의도를 분명히 드러내지 못했다는 말입니다.

 

※ 변경 전

public List<int[]> getThem() {
	List<int[]> list1 = new ArrayList<int[]>();
    
    for(int[] x : theList)
    	if(x[0] == 4)
            list1.add(x);
	return list1;
}

 

※ 변경 후

public List<int[]> getFlaggedCells() {
	List<int[]> flaggedCells = new ArrayList<int[]>();
    
    for(int[] cell : gameBoard)
    	if(cell[STATUS_VALUE] == FLAGGED)
        	flaggedCells.add(cell);
	return flaggedCells;
}

변경 전 코드에서는 getThem()함수가 어떤 함수이고, list1은 무엇이며, 상수 0과 4는 무엇을 암시하는지 전혀 알 수 없습니다.

하지만, 변경 후 코드에서는 함수, 변수, 상수가 하는 일을 명확히 알 수 있습니다.

 

<의미 있게 구분하라>

 

1. 연속적인 숫자를 덧붙인 이름을 사용하지 마라.

    - a1, a2, ..., aN 과 같은 이름은 아무런 정보도 제공하지 못하는 이름일 뿐입니다.

 

2. 불용어를 추가하지 마라.

    - 불용어를 추가한 이름은 아무런 정보도 제공하지 못합니다.

    - 만약, Product라는 클래스가 있다고 가정하고 다른 클래스를 ProductInfo, ProductData라 부른다면

      개념을 구분하지 않은 채 이름만 달리한 경우입니다.

      즉, 의미가 불분명한 불용어 입니다.

 

<클래스 이름>

 

클래스 이름과 객체 이름은 명사명사구가 적합하다. Customer, WikiPage, Account, AddressParser 등이 좋은 예다.

Manager, Processor, Data, Info 등과 같은 단어는 피하고, 동사는 사용하지 않는다.

 

 

<메서드 이름>

 

메서드 이름은 동사동사구가 적합하다. postPayment, deletePage, save등이 좋은 예입니다. 접근자(Accessor), 변경자(Mutator), 조건자(Predicate)는 javabean표준에 따라 값 앞에 get, set, is를 붙인다.

 

 

<기발한 이름은 피하라>

 

간혹 프로그래머가 나름대로 재치를 발휘해 구어체나 속어를 이름으로 사용하는 사례가 있습니다.

예를 들어, Kill() 대신에 whack()이라 부르거나 Abort() 대신 eatMyShort()라 부릅니다.

특정 문화에서만 사용하는 농담은 피하는 편이 좋습니다. 의도를 분명하고 솔직하게 표현해야합니다.

 

 

<한 개념에 한 단어를 사용하라>

 

1. 추상적인 개념 하나에 단어 하나를 선택해 이를 고수한다.

   - 똑같은 메서드를 클래스마다 fetch, retrieve, get으로 제각각 부르면 혼란스럽습니다. 만약 같은 기능을 하는 메서드

     라면 한 가지를 선택해 고수해야합니다.

 

2. 한 단어를 두 가지 목적으로 하용하지 마라.

   - 때때로, 프로그래머는 같은 맥락의 메서드 또는 클래스가 아닌데도 '일관성'을 고려해 한 가지 단어를 고수합니다.

     예를 들어, 지금까지 구현한 add() 메서드는 모두가 기존 값 두 개를 더하거나 이어서 새로운 값을 만든다고 생각해

     봅시다. 하지만, 새로 작성하는 add() 메서드는 집합에 값 하나를 추가하는 기능입니다.

     이 메서드를 add라 불러도 괜찮을까요?

 

     전혀 다른 기능의 add() 메서드입니다. 이름만 같게 지었을 뿐이지요. 그러므로, 새로 추가한 add() 메서드는 insert   

     나 append라는 이름을 사용하는 것이 적당합니다.

'STUDY > IT' 카테고리의 다른 글

[IT] 좋은 글인듯.. 읽어보자  (0) 2020.01.31
[IT] 변수명 지어주는 사이트(개발)  (1) 2020.01.28
[IT] Clean Code 리뷰 시작  (0) 2019.09.07
[IT] 이클립스 javascript 자동완성  (0) 2019.04.04
[IT]REST API란??  (0) 2019.03.02

최근 Clean Code라는 책을 구매해서 읽고있습니다. 아직 1/3 채 읽지 못했지만, 현재까지 읽은 내용을 바탕으로 중요한 내용들을 정리하고 싶어서 글을 작성합니다.

 

최근 코드를 작성하며 '내가 코드를 잘 작성하고 있는가?'라는 물음에 확실한 결론을 내놓지 못했습니다. 분명, 수 많은 사람들의 코드를 접했지만, 각자의 스타일이 다르고 방식이 달랐습니다.

그렇다면 누구의 코드가 클린한 코드일까요? 저도 잘 모릅니다.. ㅎㅎ 그래서  Clean Code책의 도움을 받아 최소한 지켜줘야 할 클린 코드의 규칙을 익히기로 했습니다.

 

책의 내용은 굉장히 만족스러웠고, 책의 내용을 조금이라도 더 이해하고 알리기 위해 포스팅을 시작하게 됐습니다.

(물론, 이해가 잘 안되는 부분도 있지만 코딩을 하다보면 차근차근 이해가 될 것 같습니다. ㅎㅎ)

 

그럼 이제 포스팅을 시작하겠습니다.

 

<클린 코드(로버트 C. 마틴)>

 

 

※ 모든 내용은 위 책을 바탕으로 작성 할 것입니다.

https://doublesprogramming.tistory.com/112

 

Spring - 게시판 만들기 연습 (Rest방식으로 댓글 수정, 삭제 구현하기)

Spring - 게시판 만들기 연습 (Rest방식으로 댓글 수정, 삭제 구현하기) 1. 구현 화면 01) 댓글 상세보기 영역 생성 로그인한 회원 본인이 작성한 댓글에 수정 버튼이 보이도록 처리 수정 버튼을 클릭하면 댓글..

doublesprogramming.tistory.com

https://www.youtube.com/watch?v=X7nbS0kWAgw

한참을 찾아다녔습니다.. 그저 Restful API에 대한 알 수 없는 개념들만 접했지만

 

이렇게 Restful API를 활용해서 게시판의 댓글 수정, 목록, 삭제를 구현한 게시물은 처음 접해봤습니다.

 

그만큼 뜻깊은 게시물이고 몇번이고 돌려봐야할 것 같습니다.

https://wondongho.tistory.com/50

 

Eclipse에 Javascript 코드 어시스트(javascript code assist) Tern Eclipse IDE 구축

유명한 코드 어시스트인 WebClipse를 설치해도 컨트롤 스페이스가 먹히지 않았다.. 그래서 다른 코드 어시스트를 발견하게되었다. 단점이라고 찾아보자면.. 수동 설정을 해줘야하는것정도? 10초면 충분하다. 이름..

wondongho.tistory.com

 

유명한 코드 어시스트인 WebClipse를 설치해도 컨트롤 스페이스가 먹히지 않았다.. 그래서 다른 코드 어시스트를 발견하게되었다.

 

단점이라고 찾아보자면.. 수동 설정을 해줘야하는것정도? 10초면 충분하다.

 

이름은

 

Tern Eclipse IDE !

 

 

설치방법

 

※ WebClipse를 사용하고 계신분들은 Eclipse Marketplace에 들어간후 탭메뉴의

Installed에 들어가신후 Uninstall 하신 후 설치해주시길 바랍니다.

 

Eclipse Marketplace -> Tern 검색 -> Tern Eclipse IDE 1.2.0 설치 후 이클립스 재부팅.

 

그런다음

 

1. 프로젝트별로 수동 설정해줘야 하므로 (10초도 안걸릴것 같음) 적용 하고 싶은 프로젝트를 

우클릭 후 Configure -> Convert to Tern Project 클릭! 

 

2. 스크롤을 내리다 보면 Cordova JavaScript라고 항목이나옴 체크 후 Ok누르면 설정 끝.

 

js 코드 몇글자 입력후 컨트롤 스페이스를 클릭하게 되면 자동완성이 쭈욱 뜬다!!

왠만한건 다되는것 같음!

봐도봐도 잊고 까먹는다..

 

그래서 이번에는 정말 간단하게 정리한 문서를 참조하겠습니다.

 

대충 이해하고 넘어간 다음에 나중에 깊게 이해하면 될 것 같습니다.

 

 

간혹 가다가 웹 페이지가 예상대로 돌아가지 않을 떄가 있다.


예를 들면, JQuery를 사용해서 태그를 숨겼는데 그대로 보이는 경우이다.


이는 페이지가 로드되면서 실행되는 순서가 다르기 때문이다.

 

 

 

<html>
    <head>
        <script src="jquery.js" type="text/javascript"></script>
        <script src="abc.js" type="text/javascript"></script>
        <link rel="stylesheets" type="text/css" href="abc.css"></link>
        <style>h2{font-wight:bold;}</style>
        <script>
            $(document).ready(function(){
                $("#img").attr("src", "kkk.png");
            });
        </script>
    </head>
 
    <body>
        <img id="img" src="abc.jpg" style="width:400px;height:300px;"/>
        <script src="kkk.js" type="text/javascript"></script>
    </body>
</html>

 

 

 

 

위와 같은 소스에서 실행 순서는 다음과 같다.


1. HTML 문서 다운로드

2. HTML 문서 파싱 시작

3. HTML 파싱이 3번 라인에 도달

4. jquery.js 가 다운로드 되고 파싱된다.

5. HTML 파싱이 4번 라인에 도달

6. abc.js가 다운로드되고 파싱되고 실행된다.

7. HTML 파싱이 5번 라인에 도달

8. abc.css가 다운로드 되고 파싱된다.

9. HTML 파싱이 6번 라인에 도달

10. <style>태그 내부 CSS 규칙이 파싱되고 정의된다.

11. HTML 파싱이 7번 라인에 도달

12. 내부 Javascript다 파싱되고 실행된다.

13. HTML 파싱이 15번 라인에 도달

14. abc.jpg가 다운로드 되고 보여진다.

15. HTML 파싱이 16번 라인에 도달

16. kkk.js가 다운로드 되고 파싱된 후 실행된다.

17. 페이지 로딩이 끝났으므로 kkk.png그림이 보인다.

18. 끝


* onload함수는 페이지 로딩이 끝나는 이후 바로 실행


* Java, JSLT, HTML, Javascript가 모두 섞여있을 경우, 보기 순서대로 실행된다.

이때, 먼저 실행되는 쪽에서 뒤쪽에서 실행되는 쪽의 값을 읽을 수 없다. 준비가 안됐기 때문.


* 하나의 jsp파일 내에 작성된 소스라 하더라도,

Scriptlet이나 jstl, el 등은 서버단에서 실행되며

Javascript는 브라우저에서 실행되기 때문에 두 언어 간 변수를 직접 주고받을 수 없다.


예를 들어, 다음과 같은 방법으로 직접적으로 변수를 쓸 수 없다. 

 

var list = new Array();
 
list = "${TestList}";
 
alert( list[0].name );

 

 

쓰려면 다음과 같이 해야한다.

var list = new Array(); <c:foreach items="${TestList}" var="item">     list.push("${item.name}"); </c:foreach>

 

 

*Expression Language

${식} 과 같은 방법으로 표현한다.

JSP의 스크립트 요소(스크립틀릿, 표현식, 선언부)를 제외한 나머지 부분에서 사용할 수 있다.

 

 

 

아래글 정말 좋다 꼭 읽어보자

http://blog.devez.net/420

 

[JSP / Servlet] JSP 라이프 사이클(life cycle)과 동작 원리 - Blog Goooood.net

JSP (JavaServer Pages) JSP 파일은 직접 실행되지 못하며 JSP 코드에 해당되는 서블릿을 생성해서 서블릿이 실행되는 방식이다. JSP는 주로 HTML 코드를 응답하기 위한 용도로 사용되며 JSP를 사용하지 않고 서블릿만으도 동일한 기능을 구현할 수 있지만 작성해야 되는 코드가 많다는 단점이 있다. JSP 실행 순서 사용자가 브라우저에서 JSP 주소를 입력했을 때 JSP가 실행되는 순서는 다음가 같다. 브라우저가 웹서버에 요청 정보를 전

blog.devez.net

 

 

 

 

출처 : https://defacto-standard.tistory.com/249

+ Recent posts