오브젝트 - 코드로 이해하는 객체지향 설계 / 조영호 지음 / 위키북스객체지향에 대해 그 동안 잊고 있었던 것들을 상기시켜주고 새로운 인사이트를 줬으며 그 동안의 설계에 대해 돌이켜 보게 해준 유익한 책.객체 사이의 의존성을 완전히 없애는 것이 정답은 아니다. 최소한의 의존성만 유지하고 불필요한 의존성을 제거하는 것이다.객체가 어떤 데이터를 가지느냐보다는 객체에 어떤 책임을 할당할 것이냐에 초점을 맞춰야 한다.객체지향 프로그램을 작성할 때 가장 먼저 고려하는 것은 무엇인가? 대부분의 사람들은 클래스를 결정한 후에 클래스에 어떤 속성과 메서드가 필요한지 고민한다. 안타깝게도 이것은 객체지향의 본질과는 거리가 멀다. 객체지향...
정말 죄송하지만, 여러분이 얼마나 열심히 노력했는지는 1도 중요하지 않아요.
커리어리앱에서 본 글인데 자극적인 제목이긴 하지만 맞는 말 이라고 생각한다.1. 목표를 달성하는 사람들은, (탁월한 성취를 이루어내는 사람들은), '공헌'에 초점을 맞춘다. 자신이 지금 하고 있는 일에서 더 높은 곳을 바라보고, 목표를 달성하기 위해 자기 자신이 아니라 외부로 눈을 놀린다.2. 그들은 다음과 같은 질문을 한다. "내가 속한 조직이 성과를 올리고 좋은 결과를 내는 데 나는 어떤 공헌을 할 수 있는가?"3. 목표를 달성하는 사람들은 책임을 중요하게 여기며, 이렇게 공헌에 초점을 맞추는 것이 목표 달성의 열쇠다.4. 하지만 대부분의 평범한 지식노동자들은 자기 능력보다 낮은 수준에 초점을 맞추는 경향이...
순수한 가공물에게 책임 할당하기
부제 : 객체지향이 실세계의 모방이라는 말에 대하여객체를 얘기할 때 실세계에 존재하는 무엇과 연관지으라는 얘기들을 많이 한다. 하지만 막상 클래스를 설계하고 객체를 생성하다보면 실세계와 맞지 않는 경우가 많이 생긴다. 이게 문제 되는 것은 항상 나를 의심하게 만들고 완성 이후에도 무언가 찝찝함이 남는다는 점이다. 이런 나의 찝찝함을 덜어주는 내용이 있어 공유해본다.크레이그 라만은 시스템을 객체로 분해하는 데는 크게 두 가지 방식이 존재한다고 설명한다. 하나는 표현적 분해이고 다른 하나는 행위적 분해다.표현적 분해는 도메인 모델에 담겨 있는 개념과 관계를 따른다. 그러나 종종 도메인 개념을 표현하는 객체에게...
MongoDB 모델링
도큐먼트 크기
아주 빈번하게 변경되는 데이터만 분리하는 것은 안정적 서비스를 위해 고려해볼 만하다.
기능별로 조회되는 부분이 완전히 다르다면 (액세스 패턴이 다르다면) 분리하는 것도 좋은 방법이다.
각 필드를 그룹핑해서 서브 도큐먼트를 만들고 응용프로그램에서 필요 서브도큐먼트만 선별해서 가져가는 것이 네트워크 사용량을 줄이는데 도움이 될 것이다.(뒤에 조금 더 자세히 설명한다.)
정규화(Document Referencing) vs 역정규화(Embedding)
역정규화는 데이터가 얼마나 커지는지, 데이터를 어떻게 읽어가는지에 따라 할지 말지 결정해라.
가능하면 몽고DB도...
Java 버전별 특징 및 변경사항
1. Java7
• 타입추론
List<String> list = new ArrayList<>();
• 이진수 리터럴, 숫자 리터럴에 _ 지원
• Switch문 문자열 가능
• try-with-resources 문 : AutoCloseable 인터페이스를 구현하는 클래스에 속하는 경우 다음과 같은 코드 패턴에 대한 단축 기능을
제공한다.
//JAVA 7 이전
//리소스를 연다
try {
리소스를 이용해 작업한다.
}
finally {
리소스를 닫는다.
}
//JAVA 7 이후
try (Resource res = ...) {
res를 이용해 작업한다.
}
//여러 리소스를...
WebFlux Error Handling
WebFlux Error HandlingdoOnError : 예외 발생시 특정행위를 수행한다.
onErrorReturn : 예외 발생시 특정 값을 return 한다.
onErrorResume : 예외 발생시 다른 Flux형태로 return 한다.
onErrorContinue : 예외 발생시 멈추지 않고 해당 영역만 skip 한다(별도 처리 하지 않는 이상 정상 응답을 return한다).
onErrorMap : 예외 발생시 다른 Exception으로 변환한다.
doOnErrorSource:
@RequestMapping("/error/test")
public Flux<Integer> getNum() {
return...