디미터 법칙과 Tell, Don't Ask 법칙
2021. 12. 10. 14:45
기타 IT
두 법칙은 객체 간의 결합도를 효과적으로 낮추기 위한 방법 중 하나이다. 의존하는 객체에 단 한 번의 메소드 참조만 하는 것이다. 조금 더 풀어보면, 데이터 중심이 아닌 기능 중심으로 코드를 작성하는 것이다. 즉, 캡슐화를 해야한다는 것인데 이는 데이터에 의존하는 절자지향 방식을 하는 사람에게는 생각보다 아주 많이 어려운 방법이다. 그렇기 때문에 두 가지의 규칙이 있다. Tell, Don't Ask 데이터를 물어보지 않고, 기능을 실행해 달라고 말하라는 규칙이다. 즉, 데이터를 나는 모르니까 너가 알아서 처리해줘!! 라는 것이다. 아래는 만료일자에 따라 어떠한 로직을 처리하는 코드이다. 먼저 절차 지향 방식의 코드를 살펴 보자. 내가 너의 데이터를 만져서 컨트롤 할게!! 나는 SI 재직 시절에 1..
자바 바이트 코드 조작하는 방법
2021. 12. 10. 14:43
Java/바이트 코드 조작하는 방법
바이트 코드를 조작하기 자바에서는 바이트 코드를 조작할 수 있다. 대표적인 예로 코드 커버리지를 측정하는 jacoco 라이브러리가 있다. 정확히는 모르지는 바이트 코드를 조작하여 코드 커버리지를 측정한다고 한다. 활용 예 코드 커버리지 jacoco 라이브러리 스프링 컴포넌트 스캔이 애노테이션들을 찾는 과정 등등 활용 범위가 굉장히 많다고 함. 바이트 코드를 조작한다는 것이 무엇일까? 간단한 예제 코드를 살펴 보겠다. 바이트 코드를 조작하여 텅빈 모자에서 토끼를 꺼내는 예제이다. 분명 Moja.java에는 빈 문자열이 들어있다. 하지만 소스는 건들지 않고 바이트 코드만 조작해서 토끼를 꺼낼 수 있다. 어떻게 코드를 조작할까? byteBuddy라는 라이브러리를 사용하면 조작할 수 있고 코드는 아래와 같이 작..
일급 컬렉션 - 비지니스에 종속적인 자료구조
2021. 12. 3. 21:37
Java
클린 코드 TDD 과정을 진행 중 일급 컬렉션에 대해 잘못 이해한 부분이 있어 정리를 하기 위해 작성하는 글 입니다. 먼저 해당 글을 참고 하였습니다. 일급 컬렉션 장점 중 비지니스에 종속적인 자료구조에 대해 추가 설명을 하는 내용이니 이를 모르시는 분은 해당 글을 보고 오시면 좋을 것 같습니다. 비지니스에 종속적인 자료구조 먼저 제가 잘못 생각한 부분은 이렇습니다. 일급 컬렉션은 하나의 컬렉션 인스턴스 변수를 가지고 내부에서 로직을 수행하면 된다!! 라고 이해 하였습니다. 상태와 로직이 한 곳에서 관리된다는 장점을 종속적인 자료구조라고 이해한 것 입니다. 위와 같이만 작성을 해도 외부에서 사용할 때는 일급 컬렉션 내부는 신경 쓸 일이 없고, 작성된 로직을 사용하면 되기 때문에 종속 되었다!! 라고 생각..
커스텀 예외 클래스는 언제 사용해야 할까?
2021. 12. 3. 20:02
Java
이 의문이 생긴 이유는 클린 코드 과정을 진행하며 아래와 같은 피드백을 받아 생겨서 글을 작성하게 되었다. 만약 추출 한다면? 대략 아래와 같이 할 생각이었다. public class IllegalArgumentBlankException extend IllegalArgumnetException { throw new IllegalArgumentException("빈 문자는 입력할 수 없습니다."); } 하지만 왜 해야 하는지? 의문이 들었다. 이런 의문이 든 의식의 흐름대로 가보겠다. 🔍 어떻게 추출하지? 책을 찾아 보자. 이 때는 별 생각없이 추출하려고 했다. 어떤 좋은 방법이 있을까... 이펙티브 자바, 클린 코드 책을 찾아 봄. 커스텀 예외 클래스에 대한 내용은 없음. 사실 내가 못찾은 것일 수도 있..
POSIX의 EOF(End Of File) 규칙
2021. 12. 3. 17:28
기타 IT
의미 자체를 해석 해보면 파일의 끝이라는 의미인데 이게 무엇일까? 파일 끝에 공백라인을 넣어주라는 피드백을 받았다. 잉? 나는 실무에서도 불필요한 공백이라고 생각해서 눈에 보이면 제거를 했었다. 하지만 이렇게 52라인과 같이 개행을 넣어야 한다는 것이다. 왜 넣어야 할까? IEEE라는 곳에서 선정한 POSIX 규칙이기 때문이라고 한다. POSIX는 간다하게 설명하면 이식 가능 운영 체제 인터페이스인데 서로 다른 유닉스 OS의 API를 정리해서 이식성이 높은 유닉스 응용 프로그램을 개발하기 위한 목적으로 IEEE라는 곳에서 규정한 인터페이스 규격이다. 이전에 C의 컴파일러 gcc는 POSIX기반으로 한줄 씩 읽는데 EOF에 개행이 없으면 병합 시 에러가 발생 했다고 한다. 요즘은 그럴 일이 없겠지만 이러한..
java로 보는 멀티 쓰레드에서 싱글톤의 위험을 간단히 알기
2021. 10. 22. 23:10
Java
Java 멀티 쓰레드 도대체 어떻게 동시에 여러명이 접속하는 거지? 멀티 쓰레드인가? 그럼 톰캣은 멀티 쓰레드를 지원하는건가? 그럼 자바에서 멀티 쓰레드가 지원 된다는건데 알고 있는데 사용해본 적이 없기에 와닿지 않는다. 라는 의문에서 간단한게 자바 코드로 싱글톤을 활용해 멀티 쓰레드의 위험도를 직접 살펴 보았습니다. 자바에서는 Runnable 인터페이스의 run()을 구현하여 Thread 클래스로 생성하고 실행할 수 있습니다. 이 부분은 더 공부하지 않고, 멀티 쓰레드와 싱글톤의 무서움을 간단하게나마 경험하기 위함입니다. 싱글톤 클래스를 만들고 두 개의 쓰레드(유저)가 결제를 하는 코드입니다. 코드에서 보면 사용자1은 20000원을 결제 했습니다. 사용자2는 10000원을 결제 했습니다. 그럼 Sing..
JPA 영속성 컨텍스트가 뭘까?
2021. 10. 18. 00:01
JPA
JPA 영속성 컨텍스트에 관하여 클라이언트 요청부터 DB까지 동작하는 로직 웹 애플리케이션에 클라이언트 요청이 들어오면 EntityMangagerFactory 는 EntityManager 객체를 생성하게 됩니다. 각각 생성된 EntityManger 객체는 DB 커넥션 풀과 연결되게 됩니다. 영속성 컨텍스트 엔티티를 영구 저장하는 환경입니다. DB에 저장하는 것이 아니라 영속성 컨텍스트 에 저장하는 것입니다. EntityManager.persist(entity); 와 같이 엔티티를 EntityManager에 저장하여 사용할 수 있다는 것입니다. 즉, 'EntityManager' 를 통해 영속성 컨텍스트 에 접근하는 것입니다. 더 쉽게 이해하려면 EntityManager -> Persisten..
Java로 자료구조 이해하기 5편(Map)
2021. 10. 16. 19:37
Java
Map 키와 쌍을 가짐. 키를 중복 x, 값은 중복 o Map은 내부적으로 Entry배열을 가지고 있는데 Entry는 key, value 쌍을 의미한다. 대략 코드는 아래와 같이 생겼다. Collection interace는 아니지만, 동일하게 사용되기 위해 Entry를 Set으로 반환한다. HashMap 특징 HashMap(동기화 x)은 Hashtable(동기화 O)의 신버전 순서를 유지하려면, LinkedHashMap 클래스를 사용하면 된다. Hashing 기법으로 데이터를 저장한다. 데이터가 많아도 검색이 빠르다. hashing 해싱이란 해시함수를 이용하여 해시 테이블에 데이터를 저장하고, 읽어오는 것을 의미한다. java에서는 hashCode() 해시 함수란 key를 인자로 주면 해시 코드를 만들..