전체 글 76

[Clean Code] 3장 함수 (2)

서술적인 이름을 사용해라 함수는 어떤 동작을 하는 것이다. 따라서 함수의 이름은 동작을 서술해야 한다. 그것이 함수의 "좋은 이름"인 것이다. 좋은 이름의 가치는 2장에서 많이 얘기했다. 함수의 이름이 길어져도 상관없다. 이름을 직접 넣어보고 읽어본 후 결정해도 된다. 어차피 우리는 IDE를 사용하고 IDE는 자동완성을 지원하니까! 한 모듈(클래스) 내에선 이름에 사용된 단어들이 일관성 있어야 한다. 회원을 만드는 함수를 createMember() 라 했으면 게시글을 만드는 함수는 createPost() 여야 하지 makePost()이면 안되고, 회원탈퇴는 deleteMember()이여야 하지 deleteUser()이면 안된다. 함수 인수 public void function(){ } public voi..

IT 책 독서록 2022.02.21

[Clean Code] 3장 함수 (1)

3장에선 함수(메서드)에 대한 내용이다. 어떤 함수가 깔끔한 함수인지 설명한다. 1. 함수는 작아야한다. 함수의 소스코드 자체가 짧아야 한다. 이는 결국 복잡한 조건문과 반복문이 엉켜있어선 안된다는 소리다. 코드가 길면 보기 어려워진다. 정확히는 하나의 블록에 속하는 코드가 길면 길수록 보기는 어려워진다. 2. 함수는 하나의 일만 해야 한다. 함수가 여러가지 일을 해서는 안된다. 여러가지 일을 한다는 것은 여러 부수효과(side-effect)를 발생시키기 아주 쉽기 때문이다. 중요한 것은, "한가지 일" 인지 "여러가지 일" 인지 어떻게 구분하는가? 이다. 만일 게시판에 글을 작성하는 writePost 함수에서, 글을 작성하는 과정은 인증과, 실제 글쓰기 2가지로 나뉜다. 즉 사용자에게 쓰기권한이 있는지..

IT 책 독서록 2022.02.18

Enum vs static final

개발을 하다보면 상수를 사용할 때가 있다. 필자는 최근 신년목표세우는 사이트를 재미삼아 만드는 중인데, 새 버전에선 신년목표뿐 아니라 1주일, 1달 등 더 세분화한 목표설정도 가능하게끔 확장하는 작업을 실시하고 있다. 이 과정에서 DB에 해당 목표의 기간이 얼마인지를 저장할 필요가 생기는데, 설정 가능한 기간은 미리 정해져있으므로 미리 정해진 기간 목록을 따로 테이블로 빼고, 기존의 목표를 저장하는 테이블에서 참조하도록 DB설계를 수정했다. DB가 수정되면 Java의 DTO 객체도 수정되어야 하는데 이 과정에서 Enum 에 대한 의문이 들어 찾아본 것을 정리해본다. 위에서 잠깐 언급한 사이트 내부에서 사용한 DTO들을 예로 들자. 아래 코드는 static final String을 이용한 코드이다. pac..

[Servlet] 기본부터 다시 보자

최근, Spring을 이용한 웹 개발을 공부하면서, 기존의 Servlet, JSP에 대한 이해가 부족하다는 것을 느꼈다. 이에 다시 기본으로 돌아가 Servlet과 이것이 동작하는 방법에 대해 공부해보았다. Servlet Servlet 이란? 쉽게 말해 Servlet은 자바를 이용해서 동적으로 웹페이지를 생성하는 서버측 프로그램 혹은 그 사양을 말한다. 구체적으로 Java EE에서 자바로 동적인 웹페이지를 생성하는 사양을 Servlet이라 정의했고, 여기서 정의한 Servlet API 를 구현한 것을 Servlet 이라고 부른다. 웹에서 동작하기 위한 HTTP 통신등의 기반기술은 모두 컨테이너에 구현되어있고, Servlet에는 사용자의 요청을 처리하는 로직이 담겨있게 된다. Servlet 컨테이너 Ser..

Java 2021.11.25

[Auth] 세션과 토큰

과거, 동아리 홈페이지를 만들던 시절에 커뮤니티 기능을 위해선 각 동아리 회원별로 할 수 있는 기능이 제한되므로 별도로 인증을 해야 했고, 자연스럽게 세션에 회원의 id 와 회원등급을 저장해 인증을 수행했다. 당시에 동아리 홈페이지 자체가 사용이 많지도 않았고, 거의 개인 프로젝트정도로 이런 걸 만들어봤다 정도여서 별 고민은 없었는데, REST API 에 대한 공부를 하면서 다음과 같은 의문을 가졌다. REST API 는 stateless 이기 때문에 클라이언트의 상태정보를 저장하지 않는데, 사용자 인증을 위해 session을 사용하면 REST API 가 의미가 없는 것 아닌가? 그렇게 정보를 찾은 결과, REST API 는 세션이 아니라 토큰을 이용해 인증작업을 수행한다는 것을 알았다. 두 방식의 차이..

Security 2021.11.15

[JVM] JVM의 구조 - 3. 힙 영역과 GC

2021.11.11 - [Java] - [JVM] JVM의 구조 - 2. 런타임 데이터 영역(RDA) [JVM] JVM의 구조 - 2. 런타임 데이터 영역(RDA) 2021.11.10 - [Java] - [JVM] JVM의 구조 - 1. 클래스 로더 [JVM] JVM의 구조 - 1. 클래스 로더 JVM의 구조 JVM은 Java Virtual Machine 의 약자로, 자바로 작성한 코드를 실행하는 가상머신이다. 현재는 많이 흐.. blog.robinjoon.space 자바의 힙 영역은 객체가 생성되고 존재하는 영역이다. 이런 객체들은 원시 타입의 데이터보다 훨씬 더 용량이 크기 때문에, 사용하지 않는 객체는 메모리에서 삭제되어야 한다. 아래 코드를 보자. for( int i = 0;i

Java/JVM 2021.11.12

[JVM] JVM의 구조 - 2. 런타임 데이터 영역(RDA)

2021.11.10 - [Java] - [JVM] JVM의 구조 - 1. 클래스 로더 [JVM] JVM의 구조 - 1. 클래스 로더 JVM의 구조 JVM은 Java Virtual Machine 의 약자로, 자바로 작성한 코드를 실행하는 가상머신이다. 현재는 많이 흐려졌지만, Java가 WORA(Write Once Run Anywhere) 를 구현하기 위해 물리적인 머신이 아닌 가상머. blog.robinjoon.space JVM의 런타임 데이터 영역은 크게 PC 레지스터(PC Register), JVM 스택(JVM Stack), 네이티브 메서드 스택(Native Method Stack), 힙(Heap), 메서드 영역(Method Area), 런타임 상수 풀(Runtime Constant Pool) 6가지..

Java/JVM 2021.11.11

[JVM] JVM의 구조 - 1. 클래스 로더

JVM의 구조 JVM은 Java Virtual Machine 의 약자로, 자바로 작성한 코드를 실행하는 가상머신이다. 현재는 많이 흐려졌지만, Java가 WORA(Write Once Run Anywhere) 를 구현하기 위해 물리적인 머신이 아닌 가상머신에서 동작하도록 구현되었다. Java로 작성한 코드는 전체적으로 아래 그림과 같은 과정을 통해 실행된다. 자바는 정적 로딩이 아니라 동적로딩을 한다. 즉, 컴파일타임이 아니라 실행타임에 클래스를 디스크에서 읽어와 메모리에 로드한다. 이런 로딩 작업을 하는 JVM의 구성요소를 클래스 로더라고 부른다. 클래스 로더는 3가지 원칙을 가지고있다. 클래스로더의 3원칙 1. 계층구조와 위임. 자바의 클래스 로더들은 서로 부모 - 자식관계를 이루어 계층을 이룬다. 또..

Java/JVM 2021.11.10

[백준] 1074번 Z

https://www.acmicpc.net/problem/1074 1074번: Z 한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을 www.acmicpc.net 문제 한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을 크기가 2N-1 × 2N-1로 4등분 한 후에 재귀적으로 순서대로 방문한다. 다음 예는 22 × 22 크기의 배열을 방문한 순서이다. N이 주어졌을 때, r행 c열을 몇 번째..

Algorithm 2021.09.25

[가계부 시스템] 5. 안드로이드 어플리케이션

2021.08.04 - [Project] - [가계부 시스템] 4. 클래스 구조 [가계부 시스템] 4. 클래스 구조 2021.07.29 - [Project] - [가계부 시스템] 3. API 설계 [가계부 시스템] 3. API 설계 2021.07.15 - [Project] - [가계부 시스템] 2. 시스템 설계 - 아키텍쳐, DB [가계부 시스템] 2. 시스템 설계 - 아키텍쳐, DB.. blog.robinjoon.space 위 포스팅에서 작성한 API를 이용해 안드로이드 어플을 제작해보았다. OKHttp3를 사용해 REST API 호출을 구현하였고, MPAndroidChart 를 이용해 수입, 지출통계화면을 구현하였다. 이번에 안드로이드 어플을 제작하면서, 처음에 생각했던 설계에 큰 오점이 있었다는 것..

Project 2021.09.22