본문 바로가기

개발 공부125

클린코드 6장 - 객체와 자료구조 6장 - 객체와 자료구조 변수를 비공개(private)로 정의하는 이유는 남들이 변수에 의존하지 않게 만들고 싶기 때문이다. 하지만 왜 수많은 프로그래머들이 get 함수와 set 함수를 당연하게 공개(public)해 비공개 변수를 외부에 노출할까? 1. 자료 추상화. 다음 두 클래스는 모두 2차원 점을 표현한 클래스이다. 하나는 구현을 외부로 노출하고 다른 하나는 구현을 완전히 숨긴다. public class Point { public double x; public double y; }public interface Point { double getX(); double getY(); void setCartesian(double x, double y); }첫번째 클래스는개별절으로 좌표값을 읽고 설정하게 강제.. 2021. 11. 22.
클린코드 5장 - 형식 맞추기 5장 - 형식 맞추기 프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야한다. 코드 형식을 맞추기 위한 간단한 규칙을 정하고 그 규칙을 따라야한다. 팀으로 일한다면 팀이 합의해 규칙을 정하고 모두가 그 규칙을 따라야한다. 1. 형식을 맞추는 목적. 코드 형식은 중요하다. 코드 형식은 의사소통의 일환이다. 오랜 시간이 지나 원래 코드의 흔적을 더 이상 찾아보기 어려울 정도로 코드가 바뀌어도 맨 처음 잡아놓은 구현 스타일과 가독성 수준은 유지보수와 확장성에 계속 영향을 미친다. 2. 적절한 행 길이를 유지하라. 500줄을 넘지 않고 대부분 200줄 정도인 파일로도 커다란 시스템을 구축할 수 있다. 일반적으로 작은 파일이 이해하기 쉽다. 신문 기사처럼 작성하라. 신문 기사를 떠올려보자. 독자는 위에서 아래로 기사.. 2021. 11. 17.
클린코드 4장 - 주석 4장 - 주석 잘 달린 주석은 그 어떤 정보보다 유용하다. 하지만 근거없는 주석은 코드를 이해하기 어렵게 만든다. 주석은 순수하게 선하지 못하다. 우리는 코드로 의도를 표현하지 못해 주석을 사용하게 된다. 프로그래밍 언어를 치밀하게 사용해 의도를 표현할 능력이 있다면 주석은 전혀 필요하지 않다. 주석은 오래될수록 코드에서 멀어진다. 주석을 관리하고 유지보수하기란 실질적으로 불가능하기 때문이다. 부정확한 주석은 아예 없는 주석보다 훨씬 더 나쁘다. 그러므로 우리는 주석을 가능한 줄이도록 꾸준히 노력해야한다. 1. 주석은 나쁜 코드를 보완하지 못한다. 주석을 추가하는 일반적인 이유는 코드 품질이 나쁘기 때문 자신이 저지른 난장판을 주석으로 설명하느라 애쓰는 대신 난장판을 깨끗이 치우는데 시간을 보내라. 2... 2021. 11. 12.
클린코드 3장 - 함수 3장 - 함수 함수는 어떤 프로그램이든 가장 기본적인 단위가 된다. 함수를 읽기 쉽고 이해하기 쉽게 구현하는 방법에 대해 알아본다. 1. 작게 만들어라! 함수를 만드는 첫번째 규칙은 작게이다. 두번째 규칙은 더 작게 이다. 함수는 가로 150 글자를 넘어서는 안된다. 세로로 100줄을 넘어서는 안된다. 사실 20줄의 함수도 길다. if, if/else, while 문 등에 들어가는 블록은 한줄이어야 한다. 함수에서 들여쓰기 수준은 1단이나 2단을 넘어서는 안된다. 2. 한가지만 해라! 함수는 한가지를 해야한다. 그 한가지를 잘 해야한다. 그 한 가지만을 해야한다. 지정된 함수 이름 아래에서 추상화 수준이 하나인 단계만 수행한다면 그 함수는 한가지 작업만 한다고 한다. 의미있는 이름으로 함수를 추출할 수 .. 2021. 11. 11.
클린코드 2장 - 의미있는 이름 2장 의미있는 이름 우리는 개발을 하면서 여러 파일, 폴더, 패키지 등등에 이름을 붙이는 일을 많이 하게된다. 이름을 잘 지으면 여러가지로 장점이 많은데 이번 장에서는 이름을 잘 짓는 규칙 몇가지를 소개한다. 1. 의도를 분명히 밝혀라 의도가 분명한 이름은 정말 중요하다. 변수나 함수, 클래스들의 이름은 다음의 굵직한 질문에 모두 답해야한다. 변수나 함수, 클래스들의 존재 이유는? 수행하는 기능은? 사용 방법은? 따로 주석이 필요하다면 의도를 분명히 드러내지 못했다는 말이다. int d; // 경과 시간보다는 int elapsedTimeDays;가 좀 더 의도가 정확히 드러나는 이름이다. 2. 그릇된 정보는 피하라 프로그래머는 코드에 그릇된 정보를 남겨서는 안된다. 특히 소문자 L 이나 대문자 O 같이 .. 2021. 10. 25.
알고리즘 - 그리디 알고리즘 이번 포스트에서는 그리디 알고리즘에 대해 알아보겠습니다. 해당 내용은 나동빈 님이 집필하신 이것이 취업을 위한 코딩테스트다 with 파이썬 을 보며 공부한 내용을 토대로 작성하였습니다. 그리디 알고리즘 그리디 알고리즘이란 국내에서 흔히 탐욕법으로도 소개되곤 합니다. 이 알고리즘은 말 그대로 단순하게 탐욕적으로 문제를 해결하는 하나의 방식을 말합니다. 매 순간 가장 최선의 선택을 하여 문제를 푸는 알고리즘이기 때문에 정렬 알고리즘과 짝을 이뤄서 출제가 되는 경향이 있습니다. 그리디 알고리즘 문제는 다른 알고리즘과 비교했을 때 사전에 외우고 있지 않아도 문제를 해결할 수 있는 가능성 이 높습니다. 하지만 그리디 알고리즘 문제의 유형의 폭이 굉장히 넓기 때문에 모든 문제를 숙련도 없이 접근해서 해결하기는 어렵.. 2021. 7. 21.
알고리즘 공부 - 준비하기 알고리즘 공부시작하기 코딩 테스트는 예전부터 항상 뜨거운 감자였다. 요즘 핫하다는 IT계열 회사의 입사 전형에 빠지지 않고 등장하는게 바로 코딩테스트이다. 어느 순간부터 좋은 회사, 흔히 마라는 네카라쿠배 급의 회사를 입사하려면 코딩테스트는 필수가 되었다. 코딩 테스트에도 종류가 갈리는데 크게 개발형 코딩테스트 알고리즘 문제 풀이형 코딩 테스트 이 두가지로 분류된다. 나는 여기서 알고리즘 문제 풀이형 코딩 테스트에 대비해 알고리즘 공부를 시작하고, 블로그를 통해 공부한 내용을 정리하려고 한다. 내가 현재 공부하고 있는 책은 나동빈님께서 서술하신 이것이 취업을 위한 코딩테스트다 라는 책이다. 책을 읽고 배운 내용을 정리하고 문제를 풀며 알고리즘에 대한 자신감이 쌓이길 기대하는 중이다. 알고리즘 코딩테스트는.. 2021. 5. 24.
Nuxt.js 에서 Vue Store 모듈 나누기 최근 개인 프로젝트 진행 중 Nuxt에서 Vue Store를 모듈로 나누기 위해 많은 자료를 찾아봤지만 안타깝게도 공식 문서에서는 자세히 정리가 안되있었습니다. 수많은 자료찾기, 다른 사람들의 프로젝트 참고하기 등을 통해 알게된 Nuxt에서 Vue Store를 모듈로 나누기에 대해서 알아보겠습니다. 들어가기 전에 지극히 저의 개인적인 방식이며 더 좋은 방법, 옳은 방법이 있다면 댓글 달아주시면 감사하겠습니다. 1. 모듈로 나누는 이유 먼저, 왜 store를 모듈로 나누어야 하는지 알아보겠습니다. export const state = () => ({ list: [] }) export const mutations = { add(state, text) { state.list.push({ text, done: .. 2020. 11. 9.
개발자 포트폴리오 만들기 - Notion 포트폴리오 만들기 - Notion Notion에서 개인에게는 무료로 서비스를 이용해준다는 말을 듣고 포트폴리오를 Notion으로 만들어야겠다는 생각을 하게되었습니다. Notion이란 메모, 문서, 프로젝트관리 등을 통합한 메모서비스 입니다. 노션은 많은 장점이 있지만 그중에서도 깔끔하고, 이쁘게 문서 정리를 할 수 있다는 점이 가장 눈에 띄었습니다. 저는 디자인에는 잼병이기 때문에..ㅎㅎ 노션의 가격 정책입니다. 물론 저는 무료버전을 이용할겁니다. 가입하기 노션을 시작하려면 먼저 가입을 해야합니다. 가입을 진행하고나면 위와같은 화면이 나옵니다. 이제 본격적으로 포트폴리오를 꾸며보도록 하겠습니다. 노션 사용하기 이제 본격적으로 포트폴리오를 만들기위해 간단하게 노션 사용법을 알아보겠습니다. 먼저 포트폴리오로.. 2020. 10. 29.
백준 [9461] - 파도반 수열 - Java 백준 9461 - 파도반 수열 백준 9461 다이나믹 프로그래밍 카테고리에 있는 문제입니다. 먼저 문제를 살펴보겠습니다. 이 문제에서 핵심은 P(1)부터 P(10)까지 첫 10개 숫자는 1, 1, 1, 2, 2, 3, 4, 5, 7, 9이다. 이 부분입니다. 여기서 정답을 출력하기 위한 점화식을 도출 할 수 있습니다. P(n) => p(n - 2) + p(n - 3) 이런 수식을 도출 할 수 있습니다. n의 값을 구하려면 n - 2의 값과 n - 3의 값을 더하면 됩니다. 문제의 입력, 출력부분과 함께 코드를 보며 설명하겠습니다. import java.util.Scanner; public class PadovanSequence { public static void main(String[] args) { .. 2020. 9. 4.
TCP, UDP란 TCP UDP란 TCP, UDP 는 TCP/IP 모델의 전송 계층 에서 사용하는 프로토콜 입니다. TCP, UDP 모두 패킷을 한 컴퓨터에서 다른 컴퓨터로 전달해주는 IP 프로토콜을 기반으로 구현되어있습니다. TCP는 연속성보다 신뢰성이 있는 전송이 중요할 때 사용하는 프로토콜입니다. UDP는 신뢰성보다 연속성이 있는 전송이 중요할 때 사용하는 프로토콜입니다. 그럼 TCP부터 자세히 알아보겠습니다. TCP TCP는 Transmission Control Protocol의 약자입니다. 네트워크에 연결된 컴퓨터에서 실행되는 프로그램 간의 데이터를 안정적으로, 순서대로, 에러없이 교환하게 해줍니다. 연결형 서비스 TCP는 연결형 서비스로 가상 회선 방식을 제공합니다. 3-way handshaking을 통해 연결.. 2020. 7. 21.
TCP/IP 4계층 이란 TCP/IP 4계층 TCP/IP 모델은 현재의 인터넷에서 컴퓨터들이 정보를 주고 받는데 쓰이는 프로토콜의 모음입니다. 하드웨어, 운영체제, 접속 매체에 관계없이 동작할 수 있는 개방성을 가집니다. _출처:https://hahahoho5915.tistory.com/15_ 1. 네트워크 엑세스 계층 (Network Access Layer) OSI 7계층의 물리 계층과 데이터 링크 계층에 해당합니다. OS의 네트워크 카드와 디바이스 드라이버 등과 같이 하드웨어적인 요소와 관련된 모든 것을 지원하는 계층입니다. 물리적인 주소로 MAC을 사용합니다. LAN, 패킷망 등에 사용됩니다. 2. 인터넷 계층 (Internet Layer) OSI 7계층의 네트워크 계층에 해당합니다. 통신 노드 간의 IP 패킷을 전송하는 .. 2020. 7. 19.