
데이터 구조 안에 많은 요소가 저장되어 있고, 그 각 요소에 대해서 무엇인가 ‘처리'해 간다고 가정하자. 이때 그 ‘처리'의 코드는 어디에 써야 할까? 일반적으로 생각하면 데이터 구조를 표시하고 있는 클래스 안에 기술할 것이다. 그러나 만약 그 ‘처리'가 여러 종류라면 새로운 처리가 필요할 때마다 데이터 구조의 클래스를 수정해야 한다. 비지터 패턴은 데이터 구조와 처리를 분리한다. 그리고 데이터 구조 안을 돌아다니는 주체인 ‘방문자'를 나타내는 클래스를 준비해서 그 클래스에게 처리를 위임한다. 그렇다면 새로운 처리를 추가하고 싶을 때에는 새로운 ‘방문자'를 만들면 된다. 그리고 데이터 구조는 문을 두드리고 있는 ‘방문자'를 받아들이면 된다. 방문자가 돌아다니는 데이터 구조로 Composite 패턴의 예제..

Object의 기본 toString 메서드가 우리가 작성한 클래스에 적합한 문자열을 반환하는 경우는 거의 없습니다. 이 메서드는 PhoneNumber@adbbd처럼 단순히 클래스_이름@16진수로_표시한_해시코드를 반환할 뿐입니다. toString의 일반 규약에 따르면 '간결하면서 사람이 읽기 쉬운 형태의 유익한 정보'를 반환해야 합니다. PhoneNumber@adbbd는 간결하고 읽기 쉽다고 볼 수도 있지만, 707-867-5309처럼 전화번호를 직접 알려주는 형태가 훨씬 유익한 정보를 담고 있습니다. 또한 toString의 규약은 "모든 하위 클래스에서 이 메서드를 재정의하라'고 합니다. equals와 hashCode 규약(아이템 10, 아이템 11)만큼 대단히 중요하진 않지만, toString을 잘 ..

equals를 재정의한 클래스 모두에서 hashCode도 재정의해야 합니다. 그렇지 않으면 hashCode 일반 규약을 어기게 되어 해당 클래스의 인스턴스를 HashMap이나 HashSet 같은 컬렉션의 원소로 사용할 때 문제를 일으킬 것입니다. 다음은 Object 명세에서 발췌한 규약입니다. equals 비교에 사용되는 정보가 변경되지 않았다면, 애플리케이션이 실행되는 동안 그 객체의 hashCode 메서드는 몇 번을 호출해도 일관되게 항상 같은 값을 반환해야 한다. 단, 애플리케이션을 다시 실행한다면 이 값이 달라져도 상관없다. equals(Object)가 두 객체를 같다고 판단했다면, 두 객체의 hashCode는 똑같은 값을 반환해야 한다. equals(Object)가 두 객체를 다르다고 판단했더라..

equals 메서드는 재정의하기 쉬워 보이지만 곳곳에 함정이 도사리고 있어서 자칫하면 끔찍한 결과를 초래합니다. 문제를 회피하는 가장 쉬운 길은 아예 재정의하지 않는 것입니다. 그냥 두면 그 클래스의 인스턴스는 오직 자기 자신과만 같게 됩니다. 그러니 다음에서 소개하는 상황 중 하나라도 해당한다면 재정의하지 않는 것이 최선입니다. 각 인스턴스가 본질적으로 고유하다 값을 표현하는 게 아니라 동작하는 개체를 표현하는 클래스가 여기 해당합니다. Thread가 좋은 예로, Object의 equals 메서드는 이러한 클래스에 딱 맞게 구현되었습니다. 인스턴스의 '논리적 동치성'을 검사할 일이 없다 예컨대 java.util.regex.Pattern은 equals를 재정의해서 두 Pattern의 인스턴스가 같은 정규..

회사에서 진행한 프로젝트에 sentry를 연동하면서 정리한 글이다. 프로젝트에서는 Gradle을 사용했으며, Spring boot 2.1.0, log4j2를 사용했다. 먼저 Spring boot 2.1.0 버전부터 지원을 한다. 위 버전 아래는 아예 다른 방식이어서 다루지 않는다. 2.1.0 버전 아래는 아래 링크를 참고하자. Spring for Java An updated Java SDK supersedes this deprecated version. Sentry preserves this documentation for customers using the old client. We recommend using the updated docs.sentry.io 회사에서 Spring boot 2.0.4를 ..

AWS Certificate Mananger를 통해서 인증서 등록을 해봅시다. 1. Certificate Manager 검색 인증서 프로비저닝의 시작하기를 누릅니다. 도메인만 발급받은 상태라면 Certificate Manager를 통해 무료로 발급받을 수 있습니다. 2. 인증서 요청 구매한 도메인에 대해 인증서를 새로 발급받을 것이니 [공인 인증서 요청]을 선택합니다. 3. 도메인 입력 인증서를 발급받을 도메인을 입력합니다. 서브 도메인까지 포함하는 인증서를 발급받고 싶으면 와일드카드(*)를 사용하여 *.connectclass.io를 입력하면 됩니다. 4. 검증 방법 선택 도메인 소유주임을 확인하기 위한 두 가지 검증 방법을 제공합니다. DNS 검증 : DNS Certificate Manager에서 제시..

1. 레코드 생성(Record Set) 호스팅 영역 메뉴를 클릭하여 구입한 도메인을 클릭하고 레코드 생성을 클릭합니다. 정책은 그대로 두고 [값/트래픽 라우팅 대상]에서 Load Balancer를 선택한 뒤 만들어 둔 로드 밸런서를 선택해줍니다. HTTPS 인증서 발급 후 실습 진행 1. EC2 로드 밸런서 리스너 추가 EC2에서 [로드 밸런싱] ⇒ [로드밸런서]로 이동합니다. 기존에 생성했던 로드밸런서를 선택하고 [리스너] 탭을 클릭합니다. 2. HTTPS 추가 [리스너 추가] 버튼을 클릭하고 HTTPS 프로토콜을 선택해준 뒤, 전달 대상을 추가해서 연결하려는 Auto Scaling 그룹을 지정해줍니다. 발급받은 HTTPS 인증서를 추가해줍니다. HTTP를 HTTPS로 리다이렉션 시키기 로드밸런서에서 ..

실제 운영 환경에 적용해서 서비스를 외부에 오픈하기 위해서 필요한 작업을 알아봅시다. 도메인, DNS DNS(Domain Name System) 서버는 도메인과 그 도메인에 연결된 IP 주소들을 관리하는 서버입니다. 도메인을 등록하기 위해서는 대행사에 돈을 내고 사용 가능한 도메인을 사야합니다. 도메인을 산 뒤 내가 원하는 IP 주소를 도메인에 연결해달라고 요청하면 DNS 서버들에 도메인과 IP 주소를 등록합니다. GoDaddy나 AWS Route 53이라는 서비스를 통해 등록이 가능합니다. AWS Route 53을 이용한 도메인 등록 1. 도메인 등록 [도메인(Domains)] ⇒ [등록된 도메인(Registered domains)] 메뉴를 선택합니다. 그 다음, 도메인 등록(Register Domai..
- Total
- Today
- Yesterday
- 알고리즘
- Kotlin
- 정규표현식
- BAEKJOON
- kotest
- JPA
- 백준
- Algorithm
- C++
- 객체지향
- 테라폼
- MSA
- 클린 아키텍처
- Spring Boot
- 코테
- 프로그래머스
- 디자인패턴
- Olympiad
- Java
- 디자인 패턴
- 클린 코드
- BOJ
- 이펙티브 자바
- Effective Java
- node.js
- kkoon9
- programmers
- AWS
- Spring
- 이팩티브 자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |