연초에 쿼리 스트링 공통 객체를 만든 적이 있습니다. 쿼리 스트링 만들기 외부 API를 받아오는 WebClient 개발 관련 포스팅입니다. 해당 github 주소입니다. GitHub - laboratory-kkoon9/spring-batch-gradle Contribute to laboratory-kkoon9/spring-batch-gradle development by creating an account on GitHub. github.co kkoon9.tistory.com 팀원들과의 지식 공유 자리에서 쿼리스트링 개발 내용을 발표했었습니다. 저는 발표에서 다음과 같은 고민을 공유했습니다. 디미터 법칙 위반 String queryString = QueryStringConverter.convert(Jso..

JVM 구조 클래스 로더 시스템, 메모리, 실행 엔진, 네이티브 메서드 인터페이스, 네이티브 메소드 라이브러리가 존재한다. 이미지는 다음 링크를 참고하자. 자바 가상 머신 - 위키백과, 우리 모두의 백과사전 ko.wikipedia.org 1. 클래스 로더 시스템 1.1 로딩(loading) 클래스 로더가 프로젝트 내에 있는 소스 코드 형태로 되어 있는 .class 파일을 읽는다. 그 파일의 내용을 binary 데이터를 만들고, 메소드에 저장한다. 이 때 저장하는 데이터는 다음과 같다. FQCN(Fully Qualified Class Name) 그 파일이 클래스인지 인터페이스인지 enum인지에 대한 식별 정보 파일 내에 있는 메서드와 프로퍼티 정보 로딩이 끝나면 해당 클래스 타입의 Class 객체를 생성하..

자바에서 두 개의 오브젝트가 같은가라는 말은 주의해서 써야 합니다. 자바에서는 “같다"라는 표현에 다음과 같은 두 가지 의미가 담습니다. 동일성(identical) 두 개의 오브젝트가 완전히 같다는 의미 == 연산자 두 개의 오브젝트가 동일하다면 사실은 하나의 오브젝트만 존재하는 것이고, 두 개의 오브젝트 레퍼런스 변수를 가집니다. 동등성(equality) 두 개의 오브젝트가 같은 정보를 담고 있다는 의미 equals() 두 개의 오브젝트가 동등한 경우에는 두 개의 각기 다른 오브젝트가 메모리상에 존재합니다. 자바 클래스를 만들 때 equals() 메서드를 따로 오버라이딩하지 않았다면, 최상위 클래스인 Object 클래스에 구현되어 있는 equals() 메서드가 사용됩니다.

객체 지향 프로그래밍에서는 프로그램 할 대상을 ‘클래스’로 표현한다. 당연하게도 어떤 것을 클래스로 표현할지는 설계자가 생각해야 한다. 클래스에 대응하는 구체적인 ‘사물'이 현실에서 존재할수도 존재하지 않을수도 있다. 경우에 따라서는 ‘이런 것이 클래스가 될 수 있나?’라고 놀랄 정도의 것을 클래스로 하는 경우도 있다. 현실세계에서 우리는 다양한 사물의 ‘상태'에 대해서 생각한다. 그러나 상태를 ‘사물’로 생각할 일이 없기 때문에, 상태를 클래스로 표현한다는 것도 쉽게 이해가 안 될 수 있다. 이번 포스팅에서는 ‘상태'를 클래스로 표현하는 방법에 대해 다룬다. 상태를 클래스로 표현하면 클래스를 교체해서 ‘상태의 변화'를 표현할 수 있고, 새로운 상태를 추가해야 될 때 무엇을 프로그램하면 좋을지 분명해진다..

되돌리기 기능인 undo를 생각해보자. 객체 지향의 프로그램에서 undo 기능을 실행하려면 인스턴스가 가지고 있는 정보를 저장해 둘 필요가 있다. 단, 저장만 해서는 쓸모가 없고 저장한 정보로부터 인스턴스를 원래의 상태로 되돌려야 한다. 인스턴스를 복원하려면 인스턴스 내부의 정보를 자유롭게 액세스할 수 있어야 한다. 하지만 원하지 않는 액세스를 허용하면 클래스 내부 구조에 의존한 코드가 프로그램의 여기저기로 흩어질 수 있어 클래스의 수정을 어렵게 한다. 메멘토 패턴을 사용하여 인스턴스의 상태를 나타내는 역할을 도입해서 캡슐화의 파괴에 빠지지 않고 저장과 복원을 실행할 수 있다. memento는 ‘기념품', ‘유물', ‘추억거리' 라는 의미를 가진다. 어떤 시점의 인스턴스의 상태를 확실하게 기록해서 저장해..

상속은 코드를 재사용하는 강력한 수단이지만, 항상 최선은 아닙니다. 잘못 사용하면 오류를 내기 쉬운 소프트웨어를 만들게 됩니다. 상위 클래스와 하위 클래스를 모두 같은 프로그래머가 통제하는 패키지 안에서라면 상속도 안전합니다. 확장할 목적으로 설계되었고 문서화도 잘된 클래스(아이템 19)도 마찬가지로 안전합니다. 하지만 일반적인 구체 클래스를 패키지 경계를 넘어, 다른 패키지의 구체 클래스를 상속하는 일은 위험합니다. 상기하자면, 이 책에서의 '상속'은 (클래스가 다른 클래스를 확장하는) 구현 상속을 의미합니다. 💡 이번 아이템에서 논하는 문제는 (클래스가 인터페이스를 구현하거나 인터페이스가 다른 인터페이스를 확장하는) 인터페이스 상속과는 무관합니다. 메서드 호출과 달리 상속은 캡슐화를 깨뜨립니다. 다르..

observer는 관찰하는 사람, 즉 ‘관찰자’라는 의미다. 옵저버 패턴에서는 관찰 대상의 상태가 변화하면 관찰자에게 알려준다. 옵저버 패턴은 상태 변화에 따른 처리를 기술할 때 효과적이다. 다음 링크는 옵저버 패턴의 예제 코드다. GitHub - kkoon9/Java-Design-Pattern: Java 언어로 배우는 디자인 패턴 입문 예제 코드 Java 언어로 배우는 디자인 패턴 입문 예제 코드. Contribute to kkoon9/Java-Design-Pattern development by creating an account on GitHub. github.com 옵저버 패턴의 등장인물 Subject(관찰 대상자)의 역할 - NumberGenerator ‘관찰되는 대상'을 나타낸다. Subjec..

서로의 입장이 같은 10명이 모여 공동 작업을 하고 있는데, 좀처럼 정리가 되지 않는 상황을 상상해보자. 이 때 입장이 다른 ‘중개인'이 등장하여 개개인의 상황을 보고 받고 상황을 정리해주면 되지 않을까? 회원들은 모두 중개인에게만 보고를 하고, 중개인만이 회원에게 지시를 내릴 수 있게 하면 회원들끼리 옥신각신할 일이 없어진다. 미디에이터는 의지할 수 있는 ‘중개인'을 상상하는 편이 더 이해하기 쉽다. 중개인은 모임의 회원으로부터 올라온 보고를 기초로 대국적인 판단을 해서 각 회원에게 지시를 내린다. 미디에이터 패턴에서 ‘중개인'을 mediator(조정자), ‘각 회원'을 colleague(동료)라고 칭한다. GoF 책에서 사용하는 용어다. 미디에이터 패턴이 어떤 상황에서 써야하는지 감이 잘 안잡힌다. ..
- Total
- Today
- Yesterday
- 이팩티브 자바
- 알고리즘
- Java
- 객체지향
- Effective Java
- Algorithm
- Spring
- 백준
- AWS
- BOJ
- Kotlin
- 디자인패턴
- kkoon9
- 이펙티브 자바
- C++
- Spring Boot
- 코테
- 정규표현식
- 클린 아키텍처
- 디자인 패턴
- 프로그래머스
- node.js
- 테라폼
- programmers
- JPA
- 클린 코드
- kotest
- MSA
- BAEKJOON
- Olympiad
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |