전체 글

전체 글

    [Clean Code] 6장 객체와 자료 구조

    변수를 비공개private로 정의하는 이유가 있다. 남들이 변수에 의존하기 않게 만들고 싶어서다. 충동이든 변덕이든, 변수 타입이나 구현을 맘대로 바꾸고 싶어서다. 그렇다면 어째서 프로그래머들이 get함수와 set함수를 당연하게 공개해 비공개 변수를 외부에 노출할까? 🤔 자료 추상화 변수를 private으로 선언 하더라도 각 값마다 조회 함수와 설정 함수를 제공한다면 구현을 외부로 노출하는 셈이다. 구현을 감추려면 추상화가 필요하다. 형식 논리에 치유쳐 조회 함수와 설정 함수로 변수를 다룬다고 클래스가 되지는 않는다. 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스다. 자료를 세세하게 공개하기보다는 추상적인 개념으로 표현하는 편이 좋다. 인터페이스나..

    [Clean Code] 5장 형식 맞추기

    프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야 한다. 코드 형식을 맞추기 위한 간단한 규칙을 정하고 그 규칙을 착실히 따라야 한다. 팀으로 일한다면 팀이 합의해 규칙을 정하고 모두가 그 규칙을 따라야 한다. 필요하다면 규칙을 자동으로 적용하는 도구를 활용한다. 형식을 맞추는 목적 코드 형식은 의사소통의 일환이다. 의사 소통은 개발자의 일차적인 의무다. 처음 잡아놓은 구현 스타일과 가독성 수준은 유지보수 용이성과 확정성에 계속 영향성을 미친다. 적절한 행 길이를 유지하라 200줄 정도인 파일로도 큰 프로젝트들을 구축할 수 있다. 일반적으로 큰 파일보다 작은 파일이 이해하기 쉽다. 신문 기사처럼 작성하라 이름은 간단하면서도 설명이 가능하게 짓는다. 이름만 보고도 올바른 모듈을 살펴보고 있는지 아닌지를 판단..

    [Clean Code] 4장 주석

    "나쁜 코드에 주석을 달지 마라. 새로 짜라." - 브라이언 W. 커니핸, P.J. 플라우거 코드를 깔끔하게 정리하고 표현력을 강화하는 방향으로, 그래서 애초에 주석이 필요 없는 방향으로 에너지를 쏟겠다. 코드만이 자기가 하는 일을 진실되게 말한다. 코드만이 정확한 정보를 제공하는 유일한 출처다. 우리는 주석을 가능한 줄이도록 꾸준히 노력해야 한다. 주석은 나쁜 코드를 보완하지 못한다 코드에 주석을 추가하는 일반적인 이유는 코드 품질이 나쁘기 때문이다. 지저분한 모듈이라는 사실을 자각했을때 "주석을 달아야겠다" 가 아니라 "코드를 정리해야 한다" 다. 자신이 저지른 난장판을 주석으로 설명하려 애쓰는 대신에 그 난장판을 깨끗이 치우는데 시간을 보내라 ! 코드로 의도를 표현하라! 많은 경우 주석으로 달려는 ..

    [Clean Code] 3장 함수

    Intro 어떤 프로그램이든 가장 기본적인 단위는 함수다. 이 장은 함수를 잘 만드는 법을 소개한다. 길이가 길고, 중복된 코드에, 괴상한 문자열에, 낯설고 모호한 자료 유형과 API로 이루어진 함수는 이해하기 어렵다. 그렇다면 읽기 쉽고 이해하기 쉽고 의도를 분명히 표현하는 함수를 어떻게 구현할 수 있을까? 함수에 어떤 속성을 부여해야 처음 읽는 사람이 프로그램 내부를 직관적으로 파악할 수 있는가? 작게 만들어라 함수를 만들 때 최대한 '작게!' 만들어야 한다. public static String renderPageWithAndTeardowns( PageData pageData, boolean isSuite ) throws Exception { boolean isTestPage = pa..

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

    Intro 소프트웨어에서 이름은 언제나 쓰인다. 이 장에선 이름을 잘 짓는 간단한 규칙을 몇 가지 소개한다. 의도를 분명히 밝혀라 좋은 이름을 지으려면 시간이 걸리지만 좋은 이름으로 절약하는 시간이 훨씬 많다. 변수(함수, 클래스)의 이름은 따로 주석이 필요하지 않을 정도로 변수의 존재 이유, 기능, 사용 방법이 드러나야한다. 의도가 드러나는 이름을 사용하면 코드 이해와 변경이 쉬워진다. 의미를 함축하거나 독자가 사전지식을 가지고 있다고 가정하면 안된다. 예시 1 // Bad - d는 아무 의미도 드러나지 않음 int d; // 경과 시간(단위: 날짜) // Good int elapsedTimeDays; int daysSinceCreation; int daysSincedModification; int f..

    [자바의 정석] 5장 배열

    배열 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것을 배열이라고 한다. 배열의 선언과 생성 원하는 타입의 변수를 선언하고 변수 또는 타입에 배열임을 의미하는 대활호[]를 붙이면 된다. // 배열을 선언 int[] score; String[] name; // 배열을 생성 score = new int[5]; name = new String[4]; 배열의 길이와 인덱스 생성된 배열의 각 저장공간을 배열의 요소(element)라고 하며, 인덱스(index)는 배열의 요소마다 붙여진 일련번호로 각 요소를 구별하는데 사용된다. 인덱스의 범위는 0부터 배열길이 - 1까지다. 유효한 범위의 값을 index로 사용하면, 컴파일을 무사히 마쳤더라고 실행 시에 ArrayIndexOutOfBoundsException에러..

    [자바의 정석] 4장 조건문과 반복문

    조건문 조건문은 조건식과 문장을 포함하는 블럭으로 구성되어 있으며, 조건식의 연산결과에 따라 실행할 문장이 달라져서 프로그램의 실행흐름을 변경할 수 있다. if 문 if 문은 가장 기본적인 조건문이다. if (조건식) { // 조건식이 true일 때 수행될 문장 } 블럭 내의 문장이 하나뿐 일 때는 괄호를 생략할 수 있지만 가능하면 생략하지않고 사용하는 것이 바람직하다. if-else 문 else블럭은 조건식이 결과가 참이 아닐 때 else블럭의 문장을 수행하라는 뜻이다. if (조건식) { // 조건식이 true일 때 수행될 문장 } else { // 조건식이 false일 때 수행횔 문장 } 처리해야할 경우의 수가 셋 이상인 경우에는 if-else if 문을 사용한다. if (조건식 1) { // 조건..

    [자바의 정석] 3장 연산자 (Operator)

    연산자와 피연산자 연산자는 연산을 수행하는 기호(+, -, *, / 등)를 뜻하고, 피연산자는 연산자의 작업 대상(변수, 상수, 리터럴, 수식)을 뜻한다. 연산자의 종류 종류 연산자 설명 산술 연산자 + - * / % > 사칙 연산과 나머지 연산 비교 연산자 > = =< == != 크고 작음과 같고 다름을 비교 논리 연산자 && || ! & | ^ ~ AND와 OR로 조건을 연결 대입 연산자 = 우변의 값을 좌변에 저장 기타 (type) ?: instancoof 형변환 연산자, 삼항 연산자, instanceof연산자 산술 변환 산술 변환이란 연산 수행 직전에 발생하는 피연산자의 자동 형변환을 말한다. 두 피연산자의 타입을 같게 일치 시킨다(보다 큰 타입으로) 피연산자의 타입이 int보다 작은 타입이..

    [자바] 프로그래머스 - H-Index (Level 2)

    [자바] 프로그래머스 - H-Index (Level 2)

    🔗 문제 링크 코딩테스트 연습 - H-Index H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표 programmers.co.kr 📝 문제 설명 H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표한 논문 n 편 중, h번 이상 인용된 논문이 h 편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다. 어떤 과학자가 발표한 논문의 인용 횟수를 담은..