오늘의 기록

    [Java] 애노테이션

    [Java] 애노테이션

    https://github.com/whiteship/live-study whiteship/live-study 온라인 스터디. Contribute to whiteship/live-study development by creating an account on GitHub. github.com 백기선님 자바 기초 스터디 12주차 목표 자바의 애노테이션에 대해 학습하세요. 학습할 것 (필수) 애노테이션 정의하는 방법 @retention @target @documented 애노테이션 프로세서 애노테이션 정의하는 방법 애노테이션 자바를 개발한 사람들은 소스코드의 주석으로부터 HTML문서를 생성해내는 프로그램(javadoc.exe)을 만들어서 사용했다. 다음은 모든 애노테이션의 조상인 Annotation인터페이스의 ..

    [Clean Code] 5. 형식 맞추기

    [Clean Code] 5. 형식 맞추기

    형식을 맞추는 목적 코드 형식은 중요하다! 코드 형식은 의사소통의 일환이다. 오늘 구현한 기능이 다음 버전에서 바뀐다 하더라도 오늘 구현한 코드의 가독성은 앞으로 바뀔 코드의 품질에 지대한 영향을 미친다. 적절한 행 길이를 유지하라 대부분 200줄 정도인 파일로도 커다란 시스템을 구축할 수 있다. 반드시 지킬 엄격한 규칙은 아니지만 바람직한 규칙으로 삼으면 좋겠다. 큰 파일보다 작은 파일이 이해하기 쉽다. 신문 기사를 떠올려 보자. 최상단에 기사를 몇 마디로 요약하는 표제가 나온다. 첫 문단은 전체 기사 내용을 요약한다. 쭉 읽으며 내려가면 세세한 사실이 조금씩 드러난다. 소스 파일도 신문 기사와 비슷하게 작성한다. 이름은 간단하면서도 설명이 가능하게 짓는다. 소스 파일 첫 부분은 고차원 개념을, 아래로..

    [Clean Code] 4. 주석

    [Clean Code] 4. 주석

    주석은 나쁜 코드를 보완하지 못한다 코드에 주석을 추가하는 일반적인 이유는 코드 품질이 나쁘기 때문이다. 코드가 지저분하면 주석을 달게 아니라 코드를 정리해야 한다! 깔끔하고 주석이 거의 없는 코드가, 복잡하고 주석이 많이 달린 코드보다 훨씬 좋다. 코드로 의도를 표현하라! 많은 경우 주석으로 달려는 설명을 코드로 대다수 의도를 표현할 수 있다. 좋은 주석 어떤 주석은 필요하거나 유익하다. 몇 가지를 소개한다. 때로는 회사가 정립한 구현 표준에 맞춰 법적인 이유로 특정 주석을 넣으라고 명시한다. 예를 들어, 각 소스 파일 첫 머리에 주석으로 들어가는 저작권 정보와 소유권 정보는 필요하고도 타당하다. 다음은 FitNess에서 모든 소스 파일 첫 머리에 추가한 주석이다. // Copyright (C) 200..

    [Java] 다중 조건 정렬

    정렬할 객체 클래스 @Getter @AllArgsConstructor class Student { int num; String name; String address; } getter 메소드를 만들어서 그 값을 기준으로 정렬한다. 추가 기준은 thenComparing 메소드를 사용한다. 기준이 복잡하면 Comparator 객체를 하나 만들어서 인자로 던져주면 된다. 깔끔한 코드가 만들어진다. List list = new ArrayList(); Student s1 = new Student(11001244, "아무개", "서울시 금천구"); Student s2 = new Student(25109435, "김김김", "서울시 중랑구"); Student s3 = new Student(11005338, "사이다",..

    [Clean Code] 3. 함수

    [Clean Code] 3. 함수

    작게 만들어라! 함수를 만드는 첫째 규칙은 '작게!'다. 함수를 만드는 둘째 규칙은 '더 작게!'다. if문, while문 등에 들어가는 블록은 한 줄이어야 한다. 대개 여기서 함수를 호출한다. 블록 안에서 함수 이름을 적절히 짓는다면, 코드를 이해하기도 쉬워진다. 그러므로 함수에서 들여쓰기 수준은 1단이나 2단을 넘어서면 안 된다. 한 가지만 해라! 함수는 한 가지만을 해야 한다. 여기서 그 '한 가지'는 어떻게 알 수 있을까? 지정된 함수 이름 아래 추상화 수준이 하나이면 된다. 의미 있는 이름으로 다른 함수를 추출할 수 있다면 그 함수는 여러 작업을 하는 셈이다. 한 가지 작업만 하는 함수는 자연스럽게 섹션으로 나누기 어렵다. 여러 섹션으로 나눠진 함수는 여러 작업을 한다는 증거다. 함수 당 추상화..

    [Java] Enum

    https://github.com/whiteship/live-study whiteship/live-study 온라인 스터디. Contribute to whiteship/live-study development by creating an account on GitHub. github.com 백기선님 자바 기초 스터디 11주차 목표 자바의 열거형에 대해 학습하세요. 학습할 것 (필수) enum 정의하는 방법 enum이 제공하는 메소드 (values()와 valueOf()) java.lang.Enum EnumSet enum 정의하는 방법 열거형은 서로 관련된 상수를 편리하게 선언하기 위한 것으로 여러 상수를 정의할 때 사용하면 유용하다. 특히 자바의 열거형은 '타입에 안전한 열거형(typesafe enum)'..

    [Clean Code] 2. 의미 있는 이름

    [Clean Code] 2. 의미 있는 이름

    들어가면서 소프트웨어에서 이름은 어디나 쓰인다. 변수, 함수, 클래스, 패키지 등 이름을 붙인다. 그래서 이름을 잘 지으면 여러모로 편하다. 이 장에서는 이름을 잘 짓는 규칙을 몇 가지 소개한다. 의도를 분명히 밝혀라 변수의 존재 이유는? 수행 기능은? 사용 방법은? 이에 따로 주석이 필요하다면 의도를 분명히 드러내지 못했다는 말이다. int d; // 경과 시간(단위: 날짜) int elpasedTimeInDays; 이름 d는 아무 의미도 드러나지 않는다. elapsedTimeInDays처럼 측정하려는 값의 단위를 표현하는 이름이 필요하다. 그릇된 정보를 피하라 프로그래머는 코드에 그릇된 단서를 남겨서는 안 된다. 나름대로 널리 쓰이는 의미가 있는 단어를 다른 의미로 사용해도 안 된다. 예를 들어, h..

    [Clean Code] 1. 깨끗한 코드

    [Clean Code] 1. 깨끗한 코드

    코드가 존재하리라 코드에 집중을 굳이 해야할까? 모델이나 요구사항에 집중해야 하지 않을까? 코드는 요구사항을 표현하는 언어, 코드의 도움 없이 요구사항을 상세히 표현하기란 불가능하다. 나쁜 코드 프로그래머라면 누구나 나쁜 코드로 고생한 경험이 있다. 그렇다면 어째서 나쁜 코드를 짰는가? 급해서? 서두루느라? 우리 모두는 자신이 짠 쓰레기 코드를 쳐다보며 나중에 손보겠다고 생각한 경험이 있다. 그러나 나중은 결코 오지 않는다. 나쁜 코드로 치르는 대가 나쁜 코드는 개발 속도를 크게 떨어뜨린다. 나쁜 코드가 쌓일수록 팀 생산성은 떨어진다. 생산성이 떨어지면 관리층은 재설계를 위해 새로운 팀을 꾸린다. 하지만 새로운 팀은 모두 떠난다. 왜? 현재 시스템이 너무 엉망이라서 일정이 촉박해 제대로 된 코딩을 할 시..