전체 글

전체 글

    [JSP] JSP 지시어

    [JSP] JSP 지시어

    JSP 지시어는 위와 같은 형식으로 표현되며 JSP 파일 내에서 JSP를 실행할 컨테이너에서 해당 페이지를 어떻게 처리할 것인가에 대한 설정 정보들을 지정해주는데 사용된다. 지시어의 종류는 다음과 같다. page지시어 include 지시어 taglib지시어 📌page 지시어 page속성에는 스크립트 언어, import할 패키지/클래스, 세션 사용 여부, 에러 페이지 등 다음 표와 같이 12개의 설정 정보를 지정해 사용할 수 있다. 각각의 속성을 하나의 page 지시어에 한 번에 지정할 수도 있으며 여러 개의 page 지시어에 나누어 지정할 수도 있다. 그러나 import 속성을 제외한 나머지 속성은 하나의 페이지에서 오직 한 번씩만 지정할 수 있다. language 속성 JSP 파일 내에서 사용될 스크립..

    [JSP] JSP 주석

    📌HTML 주석 기본적으로 HTML 문서 또는 XML 문서에서 활용되는 주석의 형태로 브라우저에 나타나는 결과에는 영향을 미치지 않지만 브라우저의 소스 보기 기능으로 확인할 수 있다. 📌JSP 주석 JSP 주석은 브라우저의 소스 보기 기능으로도 확인할 수 없다. 오로지 원본 JSP 파일을 통해서만 확인할 수 있다.

    forward와 redirect 방식

    forward와 redirect 방식

    https://yeo-computerclass.tistory.com/m/374 [Servlet] 서블릿(servlet) 포워드(forward) 종류들(dispatch, redirect, location, Refresh) 포워드(forward) Servlet 작업을 하면서 다른 Servlet이나 JSP와 연동해야 하는 경우가 있을 것이다. 이때 사용하는 방법이 바로 포워드(forward)이다. 포워드(forward) 작업을 통해서 서블릿이 받은 request 정 yeo-computerclass.tistory.com forward ( Dispatcher 방식) 이 방식으로 포워딩을 하게 되면 주소 표시줄의 주소(URL)가 변경되지 않는다. 즉, 하나의 요청이라는 의미이다. 따라서, 같은 request, re..

    Server Tomcat v8.5 Server at localhost failed to start. Error

    Server Tomcat v8.5 Server at localhost failed to start. Error

    계속 위와 같은 오류가 발생하였다. port가 충돌나는 것도 아닌데 무엇이 문제인가 서칭해보다가 해결 방법을 찾았다. 그 이유까지는 알지 못하지만 추후 공부 후 알아내면 추가 수정하도록 하겠다! Publish modules contexts to separate XML files 를 체크하면 위 문제가 해결될 수 있다.

    [JSP & Servlet] 세션(Session)

    [JSP & Servlet] 세션(Session)

    📌세션(Session) 이란? 세션의 개념을 이해하기 위해선 HTTP 프로토콜의 특성부터 이해해야 한다. HTTP 프로토콜의 대표적인 특징 중의 하나는 상태를 유지하지 않는 것이다. 즉, 클라이언트가 한 번 요청을 하고 서버에서 응답을 하면 해당 클라이언트와 서버와의 연결은 유지되지 않는다는 특징이 있다. 쉽게 설명하면 클라이언트가 첫 번째 요청을 보내고 서버가 이에 대한 답을 하고 똑같은 클라이언트가 두 번째 요청을 했을 때 서버에서는 두 번째 요청을 한 클라이언트가 첫 번째 요청을 한 클라이언트임을 인식하지 못한다. 💡HTTP 프로토콜의 요청 흐름 HTTP 프로토콜의 상태를 유지하지 않는 특징 때문에 로그인, 장바구니 담기 등 상태가 유지되어야 하는 프로그램은 작성하기가 힘들다. 이러한 단점을 보안할..

    [JSP & Servlet] 여러 개 파라미터 값(ex. 배열) 받기 - getParameterValues()

    [JSP & Servlet] 여러 개 파라미터 값(ex. 배열) 받기 - getParameterValues()

    📌하나의 파라미터에 하나의 파라미터 값 String getParameter(String ParamName) 하나의 파라미터 이름으로 하나의 파라미터 값이 전송되는 경우에는 앞서 실습했던 거 처럼 HttpServletRequest에서 제공되는 String getParameter(String ParamName)으로 처리가 가능했하다. 📌하나의 파라미터에 여러 개 파라미터 값 String[ ] getParameterValues(String paramName) 예를 들어 배열을 받았을 때 처럼, 하나의 파라미터 이름으로 여러 개의 값이 전송되어 올 때는 HttpServletRequest 인터페이스에서 제공되는 String[] getParameterValues(String paramName) 메서드를 사용해서 처..

    [JSP] 한글 깨짐

    [JSP] 한글 깨짐

    앞서 실습할 때 한글을 입력했다면 글자가 깨져서 출력되는 경우가 있었을 수 있다. 📌한글 깨지는 이유 한글 처리가 제대로 되기 위해서는 클라이언트 즉, 브라우저에서 문자를 처리하는 방식과 서버에서 문자를 처리하는 방식이 같아야 한다. 즉, 브라우저에서는 문자를 euc-kr 방식으로 처리하는데 서버에서는 ISO-8859-1 방식으로 처리하게 되면 한글이 깨지는 결과가 된다. 클라이언트에서 문자를 euc-kr로 처리한다면 서버에서도 문자를 euc-kr로 처리해야 한글이 제대로 인식된다. 기본적으로 톰캣 서버에서 사용하는 캐릭터 셋은 "UTF-8 방식"이므로 한글이 제대로 인식되려면 Character-set을 변경해주어야 한다. 📌해결1. 인코딩 방식 직접 지정 HTML 경우 JSP 경우 Servlet 경우 ..

    [JSP]  GET POST 차이

    [JSP] GET POST 차이

    목차 1. GET 방식 2. POST 방식 3. GET 방식 예제 4. POST 방식 예제 GET 방식 //url에서 사용될 때 /myhome/mpahe.jsp?name=yeo-seung-chul&email=yeo@tistory.com //view에서 링크 여승철 특징 전송할 파라미터 데이터들을 URL 뒤에 name=value 형태로 전송한다. 여러 개의 파라미터 데이터들을 전송할 시에는 구분자로 '&'을 사용한다. 요청 시 파라미터 정보와 값들이 다 노출되므로 보안에 취약하다. 전송할 수 있는 파라미터의 길이는 최대 255 바이트이다. 본문(body)이 필요 없기 때문에 전송 속도가 POST 방식에 비해 빠르다. 언제 사용? 간단한 페이지를 요청할 때 사용 GET 방식으로 요청이 전송되는 경우 HTML..

    [JSP] 이클립스 톰캣(Tomcat) 서버 추가

    [JSP] 이클립스 톰캣(Tomcat) 서버 추가

    JDK - 8.0.275 Tomcat 8.5.77 버전 Eclipse Java EE IDE for Web Developers 을 설치하였다. 📌이클립스에 톰캣 서버 등록하기 1. Eclipse를 시작한 후 [Winddow] > [Preferences] > [Server] > [Runtime Environments] 를 차례대로 클릭한다. 2. [Add] > Apache Tomcat 선택 (자신의 버전에 맞게) > 그 후 경로 정해서 [Finish] 클릭하면 된다. 3. 완료됐다면 메인화면에서 [Servers] 탭에 걸려 있는 링크를 클릭한다. 4. 위에서 각자 서버로 추가한 버전을 클릭한 후 [Finish] 클릭 > 완료 Servers 탭에 Tomcat 서버가 추가되었으면 서버 등록 작업이 완료된 것이다..

    [JSP & Servlet] JSP & Servlet 이란?

    [JSP & Servlet] JSP & Servlet 이란?

    📌웹 프로그래밍이란? 우리는 브라우저를 통해서 앉은자리에서 전 세계의 정보와 상품을 검색하고 구입할 수 있고 인터넷을 통해서 할 수 없는 일이 없을 정도로 자주 사용하고 유용하다. 그럼 우리가 브라우저를 통해 접할 수 있는 많은 사이트들은 어떻게 만들어졌을까? 예를 들어 google이나 네이버, 11번가 개인 쇼핑몰 등 대체로 모든 사이트들은 모두 웹 프로그래밍 언어를 통해서 구축되었다 할 수 있다. 웹 상에서 사용자와 기업 또는 사용자들간의 연결을 가능하게 하는 프로그래밍 언어이다. 웹 프로그래밍 동작 방식 일반적으로 웹 프로그래밍은 클라이언트(Client) / 서버(Server)의 방식으로 구축된다. 클라이언트(사용자)가 웹 브라우저를 통해 어떤 결과를 보여달라는 요청(Request)을 웹 서버에 보..

    C# WPF URL Download

    C# WPF URL Download

    역시 가장 좋은 참고가 되는 것은 해당 업체의 reference를 보는 것이 가장 좋다. https://docs.microsoft.com/ko-kr/dotnet/api/system.net.webclient.downloadfile?view=net-6.0 WebClient.DownloadFile 메서드 (System.Net) 지정된 URI를 사용하여 로컬 파일에 리소스를 다운로드합니다. docs.microsoft.com 위 문서를 살펴보면 파일을 다운로드 받는 거 뿐만 아니라 설치 진행률을 볼 수 있는 Bar, 파일 업로드, 파일 다운받는 동안 다른 행위를 할 수 있게 하는 Sync등 여러가지 기능이 있지만, 일단 가장 기본적인 파일 다운로드만 살펴보려고 한다. 일단 기본 틀을 만들어준다. 함수 Downlo..

    C# 계산기 만들기

    C# 계산기 만들기

    앞서 포스팅한 글에 계산기를 만들기 위한 최소한의 기능을 작성하였으니 읽어보길 바란다. https://yeo-computerclass.tistory.com/102 C# WPF 간단 설명 회사 내에서 설치 파일(Setup.exe)을 만들기 위해 NSIS 문법을 공부하고 레지스트리에 대해서 공부했던 거 처럼 이번엔 FileHashVerifier을 제작하기 위해 C#을 공부하기 시작했다. 단 기간 내에 만들어야 yeo-computerclass.tistory.com 1) MainWindow.xaml 창에서 계산기 만들기 [도구 상자]에서 [Button] 과 [TextBox] 를 이용하여 계산기 모양을 만들었다. 추가로 속성을 통해 색깔과 글씨 모양을 부여하였다. 이제 [Button], [TextBox]에 이름을..

    C# WPF 간단 설명

    C# WPF 간단 설명

    회사 내에서 설치 파일(Setup.exe)을 만들기 위해 NSIS 문법을 공부하고 레지스트리에 대해서 공부했던 거 처럼 이번엔 FileHashVerifier을 제작하기 위해 C#을 공부하기 시작했다. 단 기간 내에 만들어야 하기 때문에 문법은 따로 공부하지 않고 바로 간단한 실습을 하면서 C# WPF를 익히려 한다. 간단한 실습으로 계산기를 만들어보도록 하겠다. 계산기를 만들어보기 앞서 기본적으로 알아야할 셋팅과 작동 방법 등을 포스팅 해보려한다. 1. Visual Studio 2022 버전을 깔아준다. 2.[새 프로젝트 만들기] 클릭 3. [WPF 애플리케이션] 클릭 4. 프로젝트 이름 / 솔루션 이름을 입력해주고 [다음]을 클릭해준다. 5. Framework(F)에서 [ .NET Core 3.1 (장..

    [디자인 패턴] 프록시 패턴(Proxy Pattern)

    [디자인 패턴] 프록시 패턴(Proxy Pattern)

    📌프록시(Proxy)란? 프록시(Proxy)란 우리말로 대리자, 대변인 이라는 뜻이다. 뜻에서도 유추할 수 있듯이 무언가를 대신해주는 구조의 패턴이다. 즉, 어떤 객체를 사용하고자 할때, 객체를 직접적으로 참조하는 것이 아니라, 해당 객체를 대행(proxy)하는 객체를 통해 대상 객체에 접근하는 방식이다. 이 방법을 사용하면 해당 객체가 메모리에 존재하지 않아도 기본적인 정보를 참조하거나 설정할 수 있기 때문에 실제 객체가 필요한 시점까지 객체의 생성을 미룰 수 있다. 아래 링크를 참고하면 프록시(Proxy)를 이해하는데 더 도움될 것이다. https://yeo-computerclass.tistory.com/213 HTTP 프록시란? 📌프록시 서버(Proxy Server)란? 프록시 서버란 클라이언트와 ..

    [디자인 패턴] 어댑터 패턴(Adapter Pattern)

    📌어댑터(Adapter)란? 어댑터(Adapter)를 번역하면 변환기(converter)이다. 변환기의 역할은 서로 다른 두 인터페이스 사이에 통신이 가능하게 하는 것이다. 주변에서 가장 흔히 볼 수 있는 변환기로는 충전기가 있다. 핸드폰을 충전할 때 직접 콘센트에 연결할 수 없기 때문에 충전기가 콘센트와 핸드폰 사이에서 둘을 연결해주는 변환기의 역할을 수행한다. 즉, 어댑터 패턴(Adapter Pattern)은 호출당하는 쪽의 메소드를 호출하는 쪽의 코드에 대응하도록 중간에 변환기를 통해 호출하는 패턴이다. 같은 말이지만 다른 관점으로 본다면 어댑터 패턴(Adapter Pattern)은 이미 구현 되어 있는 객체를 이용하여 다른 기능을 구현하는 패턴이라고도 볼 수 있다. 코드는 가능한 적게 작성하는 것..

    [디자인 패턴] 싱글톤 패턴(Singleton Pattern)

    [디자인 패턴] 싱글톤 패턴(Singleton Pattern)

    싱글톤 패턴(Singleton Pattern)이란? 싱글톤 패턴(Singleton Pattern) 싱글톤 패턴이란 인스턴스를 하나만 만들어 사용하기 위한 패턴이다. 하나의 인스턴스를 만들어 놓고 해당 인스턴스를 다른 모듈들이 공유하며 사용하기 때문에 인스턴스를 생성할 때 비용이 줄어드는 장점이 있다. 하지만 의존성이 높아진다는(모듈 간의 결합을 강하게 만드는) 단점이 있다. 싱글톤 패턴(Singleton Pattern) 특징 생성자에 private 접근 제어자를 지정→객체 생성을 위한 new에 제약을 걸어야 하기 때문이다. 단일 객체를 반환할 수 있는 정적 메소드가 필요 단일 객체를 참조할 정적 참조 변수가 필요 싱글톤 패턴 예제 예시: 프린터 프린트 하나를 10명이 공유해서 사용한다고 해보자. Prin..

    3장 리서치 & 프레젠테이션

    3장 리서치 & 프레젠테이션

    📌출처와 현장을 조사하라 현장에 가서 '1차 정보'를 얻어야 합니다. (제일 정확한 사실이기 때문입니다.) 설문을 위한 설문을 하지 말아야 한다. (질문을 계기로 상대방도 의식하지 못한 잠재적인 니즈를 발굴해내야 하기 때문입니다.) 예를 들어 설문 조사에 '이 디자인은 좋습니까, 실습니까?' 같은 문항이 나오면 굳이 싫지 않아서 '좋습니다'에 투표를 한다. '좋다'는 의견이 많아서 이 디자인으로 만들었지만 전혀 팔리지 않는 경우가 발생한다. 좋은 질문의 예 [원인을 찾는 질문] 왜 되지 않았나요? / 무엇이 일어났나요? / 무엇이 멈춰 있나요? [해결책을 이끌어내는 질문] 어떻게 하면 잘할 수 있나요? / 지금 무엇을 하면 되나요? [시점을 바꾸는 질문] 이문제는 언제부터 시작되었나요? / 부하(상사)라..

    2. '가설'을 세우자

    2. '가설'을 세우자

    📌가설을 검증하는 '이슈 트리' 문제를 해결할 때 가설, 즉 가상의 해답을 세우는 것이 중요합니다. 바꿔 말하면 '해답'을 찾는 것입니다. 가설이 필요한 이유는 가설을 빨리 세우면 그것이 올바른 답인지 아닌지도 빨리 검증할 수 있기 때문입니다. 예를 들어, 어떤 문제인지를 파악했다면, 그 파악에 대한 가해결책(가설)을 빨리 세워 가설이 옳은지 그른지를 검증해야 합니다. 만약 틀렸다면, 다음 가설을 세워 다시 검증합니다. 이러한 반복 작업이 올바른 해결책으로 인도하는 길이 됩니다. 이를 위해 사용하는 것이 '이슈 트리'입니다. 이슈 트리란 가장 중요한 과제(이슈)를 출발점으로 하여, 그 가설이 올바른지, 아닌지를 'YES/NO'로 검증해 나가는 것입니다. 로직 트리가 요인(Why/Where)을 특정하는데 ..

    1. '진짜 문제' 찾기

    1. '진짜 문제' 찾기

    📌 '문제 해결'이란 무엇을 하는 것인가 Q. 문제가 일어났을 때 문제를 해결하지 못하는 이유는 무엇일까? A.바로 문제라고 생각했던 것이 실은 진짜 문제가 아니기 때문이다. ⇒즉, 무엇이 진짜 문제인지 정확히 파악하지 못하면, 정확한 해결책 또한 이끌어내지 못한다. 맥킨지에서는 '진짜 문제'를 발견하면 십중팔구 정확하게 문제를 해결할 수 있다고 한다. 많은 사람들은 문제가 발생하면 즉시 그 해결책을 찾으려하는데 그전에, 지향점 확인 무엇이 문제인지를 설정 (문제 파악) 이 두 가지를 명확히 하는 것이 중요하다. 📌문제 해결의 흐름 Step1. 문제를 정리하고 구조화하여 '진짜 문제'를 명확히 한다. 눈 앞에 일어난 일을 정리하고 구조화하여, '무엇이 문제인지,(문제 정의. 지향점 확인)' '그 문제가 ..

    4장. 내 말이 먹히기 시작하는 실전 설명의 기술

    4장. 내 말이 먹히기 시작하는 실전 설명의 기술

    4장에서는 능숙하게 설명하기 위한 몇 가지 기술과 자료 작성법 등을 소개한다. 설명력의 응용 편으로 몇 가지 방식들이 있다. 상대를 끌어당기는 '통설 BUT' 설명법 보통 알려지기로는 OO 이다(통설). 그러나(but) 실은 OO 이다. 설명 도입부에서 이렇게 제시한 후 각 요소의 설명으로 들어간다. 지금까지 이렇게 이해했겠지만, 실은 OO 이다. →'통설 But' 그것은 이런 것이다. →자세한 설명, 핵심은 최대 세 가지로 압축 예를 들면 OO 이다. →구체적인 예, 에피소드, 데이터 제시 즉 이렇다. →전체 정리 논문이 대부분 이런 형태를 취한다. 통설을 제시하고 '사실은' 이라고 하면서 내용을 전개해간다. 단, 논문에서도 통설 소개가 너무 장황하면 서론이 길어져 글이 지루해질 수가 있기 때문에 설명..

    3장. 일상생활에서 기르는 탄탄한 설명 내공

    3장. 일상생활에서 기르는 탄탄한 설명 내공

    3장에서는 일상에서 설명력을 키우는 트레이닝 방법을 소개한다. 자신의 경험과 연관지어 나만의 설명을 만든다. 어려운 내용이라도 친숙한 에피소드를 잘 곁들이면 본질이 간결하게 전해져 이해하기 쉽다. 15초 트레이닝 간결하게 설명하려면 일단 불필요한 말을 없애는 습관을 들여야 한다. 15초라는 시간은 짧은 듯하지만 설명하기에는 충분히 긴 시간이다. 그러므로 이때도 흐름을 갖춰야 한다. 빨리 끝내도 안 되고, 정보가 너무 적어도 안 된다. 15초라는 시간 동안 의미를 얼마나 담느냐가 중요하다. 15초 동안 간결하게 설명하는 방법을 익힌 다음, 그 15초 부분을 4개로 구성 하면 1분짜리 설명이 된다. 이를 테면 한 가지 핵심에 15초를 사용하는 것이다. 앞서 핵심을 세 가지로 설명하라고 했으니 이를 모두 설명..

    2장. 복잡한 이야기도 쉽게 풀어내는 설명의 공식

    2장. 복잡한 이야기도 쉽게 풀어내는 설명의 공식

    2장에서는 훌륭한 설명의 기본 구조를 소개하고 설명의 구성 방식을 제시한다. 이 구성만 익혀도 설명력은 향상된다고 설명하고 있다. 능숙한 설명의 기본 구조 먼저 한마디로 말하면 OO 입니다. →본질을 요약해 한마디로 표현한다. 이를 위해 인상적인 문구를 만든다. 핵심은 OO 입니다. →핵심은 최대 세 가지로 요약한다. 중요도나 상대가 원하는 우선순위를 반영하여 제시한다. 구체적으로 말하면 OO 입니다. →예시, 에피소드, 자신의 체험 등으로 보충한다. 정리하면 OO 입니다. →지금까지 설명한 내용을 최종적으로 정리한다. 책을 활용한 요약 능력 트레이닝 A4 용지에 먼저 책의 제목을 적는다. 책을 읽어가면서 삼색 볼펜으로 중요한 부분에 밑줄을 긋는다. (중요한 문구 뿐만 아니라 숫자에도 특히 주의한다. 숫..

    1장. 좋은 설명은 1분이면 충분하다.

    1장. 좋은 설명은 1분이면 충분하다.

    1장에서는 1분 설명력이란 어떤 능력이며 어떤 기술이 필요한지를 이야기 한다. 설명을 잘하는 사람을 만나면 왜 똑 부러지는 사람이라고 느끼는지 밝히고, 설명을 잘한다는 것은 어떤 의미인지 설명한다. 설명에 필요한 3가지 능력 - 시간 감각 / 요약 능력 / 예시 능력 1.설명을 잘하는 사람은 주위 사람의 인생을 낭비하지 않고 행복하게 한다. (시간 감각) 설명이 서툴면 주위 사람은 계속해서 시간을 빼앗긴다. 반대로 설명을 잘하면, 정보가 효율적으로 전달되므로 주위 사람의 시간도 절약해주는 셈이다. 따라서 기본적으로 설명력과 시간 감각을 세트로 의식해야 한다. 2.설명력에서 지성을 엿볼수 있다. (요약 능력) 머리가 좋다고 인정하는 몇 가지 핵심 중에 많은 사람이 척도로 삼는 것 중 하나가 바로 이해력이다..

    NSIS 개념과 NSIS 스크립트

    NSIS 개념과 NSIS 스크립트

    NSIS (Nullsoft scriptable Install System) 인스톨러는 파일을 복사하거나 업데이트하며 레지스트리 키를 쓰고, 설정을 구성하고, 바로가기를 생성한다. 이러한 작업들은 사용자 편의를 위해 자동으로 수행해준다. NSIS는 이런 인스톨러를 구축할 수 있도록 도와주는 제작 도구이다. NSIS는 파일 복사 등 같은 기본 작업부터 레지스트리 키 등록 작업, 환경 변수 설정, 최신 파일 다운로드, 구성 파일 수정 등과 같은 복잡한 작업까지 지원한다. NSIS는 스크립트 언어 기반이며 외부 플러그인도 지원하기 때문에 많은 기능을 제공하고 모든 파일과 설치 스크립트를 하나의 실행 파일로 컴파일하여 배포할 수 있다. 이런 다양한 옵션을 제공함에도 작은 오버헤드 크기를 갖는다. ※위에서 간략하게..

    [Clean Code]클린코드_10_클래스

    [ 클래스 체계 ]클래스를 정의하는 표준 자바 관례에 따르면, 가장 먼저 변수 목록이 나온다. 정적 공개 (static public) 상수가 있다면 맨 처음에 나온다. 다음으로 정적 비공개(private) 변수가 나오며, 이어 비공개 인스턴스 변수가 나온다. 공개 변수가 필요한 경우는 거의 없다.  변수 목록 다음에는 공개 함수가 나온다. 비공개 함수는 자신을 호출하는 공개 함수 직후에 넣는다. 즉 , 추상화 단계가 순차적으로 내려간다. 그래서 프로그램은 신문기사 처럼 읽힌다. -캡슐화변수와 유틸리티 함수는 가능한 공개하지 않는 편이 낫지만 반드시 숨겨야 한다는 법칙도 없다. 때로는 변수나 유틸리니 함수를 protected로 선언해 테스트 코드에 접근을 허용하기도 한다. 우리에게 테스트는 아주 중요하다...

    [Clean Code]클린코드_9_단위 테스트

    [ TDD 법칙 세 가지 ] 첫째 법칙: 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 둘째 법칙: 컴파일은 실패하지 않으면서 실행히 실패하는 정도로만 단위 테스트를 작성한다. 셋째 법칙: 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. [ 깨끗한 테스트 코드 유지하기 ] 실제 코드가 진화하면 테스트 코드도 변해야 한다. 그런데 테스트 코드가 지저분할 수록 변경이 어려워진다. 실제 코드를 변경해 기존 테스트 케이스가 실패하기 시작하면, 지저분한 코드로 인해, 실패하는 테스트 케이스를 점점 더 통과시키기 어려워진다. 그래서 테스트 코드는 계속해서 늘어가는 부담이 되어버린다. 테스트 코드는 실제 코드 못지 않게 중요하다. 테스트 코드는 이류 시민이 아니다. 테스트 코드는 ..

    [Clean Code]클린코드_8_경계

    시스템에 들어가는 모든 소프트웨어를 직접 개발하는 경우는 드물다. 때로는 패키지를 사고, 떄로는 오픈 소스를 이용한다. 때로는 사내 다른 팀이 제공하는 컴포넌트를 사용한다. 어떤 식으로든 외부 코드를 우리 코드에 깔끔하게 통합해야한다. 이때 소프트웨어 경계를 깔끔하게 처리하는 기법과 기교가 있어야한다. [ 경계 살피고 익히기 ] 외부 코드를 사용하면 적은 시간에 더 많은 기능을 출시하기 쉬워진다. 하지만 외부 코드를 익히기는 어렵다. 외부 코드를 통합하기도 어렵다. 두 가지를 동시에 하기는 더 어렵다. 다르게 접근하여 곧바로 우리쪽 코드를 작성해 외부 코드를 호출하는 대신 먼저 간단한 테스트 케이스를 작성해 외부 코드를 익히면 어떨까? 짐 뉴커크(Jim Newkirk)는 이를 학습 테스트 라 부른다. 학..

    [Clean Code]클린코드_7_오류 처리

    깨끗한 코드와 오류 처리는 연관성이 있다. 상당수 코드 기반은 전적으로 오류 처리 코드에 좌우된다. 여기서 좌우된다는 표현은 코드 기반이 오류만 처리한다는 의미가 아니다. 여기저기 흩어진 오류 처리 코드 때문에 실제 코드가 하는 일을 파악하기가 거의 불가능하다는 의미다. [ 오류 코드보다 예외를 사용해라 ] 앞서 오류 코드보다 예외를 사용했을 때 더 깨끗한 코드가 됨을 설명했다. [ Try-Catch-Finally 문부터 작성해라 ] 예외에서 프로그램 안에다 범위를 정의한다는 사실은 매우 흥미롭다. try-catch-finally문에서 try블록에 들어가는 코드를 실행하면 어느 시점에서든 실행이 중단된 후 catch 블록으로 넘어갈 수 있다. 어떤 면에서 try 블록은 트랜잭션과 비슷하다. try 블록에..

    [Clean Code]클린코드_6_객체와 자료 구조

    변수를 비공개(private)로 정의하는 이유가 있다. 남들이 변수에 의존하지 않게 만들고 싶어서 이다. 충동이든 변덕이든, 변수 타입이나 구현을 맘대로 바꾸고 싶어서다. 그렇다면 어째서 수많은 프로그래머가 조회(get)함수와 설정(set)함수를 당연하게 공개(public)해 비공개 변수를 외부에 노출할까? [ 자료 추상화 ] 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스다. // 구체적인 Point 클래스 public class Point { public double x; public double y; } // 추상적인 Point 클래스 public interface Point { double getX(); double getY(); void s..

    [Clean Code]클린코드_5_형식 맞추기

    프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야한다. 코드 형식을 맞추기 위한 간단한 규칙을 정하고, 그 규칙을 착실히 따라야한다. 팀으로 일한다면, 팀이 합의해 규칙을 정하고 모두가 그 규칙을 따라야한다.필요하면 규칙을 자동으로 적용하는 도구를 활용한다. [ 적절한 행 길이를 유지해라 ] 큰 파일보다는 작은 파일이 이해하기 쉬우므로 적절한 행 길이를 유지해야 한다. -신문기사 처럼 작성해야 한다. 신문을 읽을 때 최상단에 기사를 몇 마디로 요약하는 표제가 나온다. 마찬 가지로 이름은 간단하면서도 설명이 가능하게 지어야하고 아래로 내려갈수록 의도를 세세하게 묘사하여야한다. -개념은 빈 행으로 분리해라. 일련의 행 묶음은 완결된 생각 하나를 표현한다. 생각 사이에는 빈 행을 넣어 분리해야 한다. 예를 들어..