분류 전체보기 (93) 썸네일형 리스트형 intelliJ - cannot resolve symbol cannot resolve symbol {ClassName} intelliJ에서 자바로 프로그램 작성중 특정 클래스(ClassName으로 통일) 를 import 하는 경우에 이유 없이 발생하는 에러 해결책 : File -> Invalidate Caches / Restart... 를 이용하면 대부분 해결 된다.위의 케이스로 안되는 경우 import시 에러나는 ClassName 파일을 지웠다가 undo로 돌리면 해결 되는 케이스도 있다. lombok - cannot be applied to given types cannot be applied to given types lombok 사용 시 클래스에 @Builder와 @NoArgsConstructor를 같이 쓰는 경우 발생하는 에러 해결책 : @AllArgsConstructor 추가 메시지와 인터페이스 메시지와 메시지 전송메시지 : 객체들이 협력하기 위해 사용할 수 있는 유일한 의사소통 수단메시지 전송, 메시지 패싱 : 다른 객체에게 도움을 요청 하는 것메시지 전송자 : 메시지를 전송하는 객체메시지 수신자 : 메시지를 수신하는 객체메시지는 오퍼레이션명과 인자로 구성되며 메시지 전송은 여기에 메시지 수신자를 추가한 것 메시지와 메서드메서드 : 메시지를 수신했을 때 실제로 실행되는 함수 또는 프로시저메시지와 메서드의 구분은 메시지 전송자와 메시지 수신자가 느슨하게 결합될 수 있게 한다. - 실행 시점에 메시지와 메서드를 바인딩하는 메커니즘은 두 객체 사이의 결합도를 낮춤으로써 유연하고 확장 가능한 코드를 작성할 수 있게 만든다. 퍼블릭 인터페이스와 오퍼레이션퍼블릭 인터페이스 : 객체가 의사소통을 위해 외부.. 책임 할당하기 데이터보다 행동을 먼저 결정하라객체에게 중요한 것은 데이터가 아니라 외부에 제공하는 행동이다.객체는 협력에 참여하기 위해 존재하며 협력 안에서 수행하는 책임이 객체의 존재가치를 증명한다.데이터는 객체가 책임을 수행하는 데 필요한 재료를 제공할 뿐이다. 협력이라는 문맥 안에서 책임을 결정하라객체에게 할당된 책임의 품질은 협력에 적합한 정도로 결정된다.책임은 객체의 입장이 아니라 객체가 참여하는 협력에 적합해야 한다. 책임 주도 설계(RDD)1. 시스템이 사용자에게 제공해야 하는 기능인 시스템 책임을 파악한다.2. 시스템 책임을 더 작은 책임으로 분할한다.3. 분할된 책임을 수행할 수 있는 적절한 객체 또는 역할을 찾아 책임을 할당한다.4. 객체가 책임을 수행하는 도중 다른 객체의 도움이 필요한 경우 이를 .. 설계 품질과 트레이드오프 설계 트레이드오프캡슐화 - 외부에서 알 필요가 없는 부분을 감춤으로써 대상을 단순화하는 추상화의 한 종류 - 상태와 행동을 하나의 객체 안에 모으는 이유는 객체의 내부 구현을 외부로부터 감추기 위해서이다.구현 : 변경될 가능성이 높은 부분인터페이스 : 상대적으로 안정적인 부분설계가 필요한 이유는 요구사항이 변경되기 때문이고, 캡슐화가 중요한 이유는 불안정한 부분과 안정적인 부분을 분리해서 변경의 영향을 통제할 수 있기 때문이다.응집도 - 모듈에 포함된 내부 요소들이 연관되어 있는 정도를 나타냄 - 변경이 발생할 때 모듈 내부에서 발생하는 변경의 정도결합도 - 의존성의 정도를 나타내며 다른 모듈에 대해 얼마나 많은 지식을 갖고 있는지를 나타내는 척도 - 한 모듈이 변경되기 위해서 다른 모듈의 변경을 요구하.. 역할, 책임, 협력 협력객체들이 애플리케이션의 기능을 구현하기 위해 수행하는 상호작용메시지 전송 : 객체 사이의 협력을 위해 사용할 수 있는 유일한 커뮤니케이션 수단메시지를 수신한 객체는 메서드를 시행해 요청에 응답한다.외부의 객체는 오직 메시지만 전송할 수 있고, 메시지를 어떻게 처리할지는 메시지를 수신한 객체가 직접 결정한다. - 객체는 자신의 일을 스스로 처리할 수 있는 자율적인 존재객체를 자율적으로 만드는 가장 기본적인 방법은 내부 구현을 캡슐화하는 것이다. 캡슐화를 통해 변경에 대한 파급효과를 제한할 수 있기 때문에 자율적인 객체는 변경하기도 쉬워진다.상태는 객체가 행동하는 데 필요한 정보에 의해 결정되고 행동은 협력 안에서 객체가 처리할 메시지로 결정된다. 결과적으로 객체가 참여하는 협력이 객체를 구성하는 행동과.. Eviction, Expiration, Passivation cache는 속도를 위해 대부분 memory를 사용memory는 disk에 비해 사용 공간이 훨씬 적을 수 밖에 없음 Eviction - 공간이 필요할 때 어떤 데이터를 지워주는 것 - memory가 가득 차면 사용하지 않는 데이터를 지워줘야 새로 데이터가 들어올 수 있음 - 대부분 LRU(Least Recently Used : 가장 오랜 기간 참조되지 않은 데이터를 교체) 알고리즘 방식을 사용 Expiration - 데이터의 유통기한 - 일반적으로 TTL(Time To Live)이라는 단어를 사용 Passivation - 기능을 사용하면 eviction의 대상이 되는 데이터가 지워지기 전에 우선 디스크등 다른 스토리지에 저장 - 추후 같은 데이터에 대한 요청이 들어오면 파일에서 찾아 돌려줌 객체지향 프로그래밍 협력, 객체, 클래스1. 어떤 클래스가 필요한지를 고민하기 전에 어떤 객체들이 필요한지 고민하라.2. 객체를 독립적인 존재가 아니라 기능을 구현하기 위해 협력하는 공동체의 일원으로 봐야 한다. 도메인의 구조를 따르는 프로그램 구조도메인 : 문제를 해결하기 위해 사용자가 프로그램을 사용하는 분야 클래스 구현하기객체 1. 상태와 행동을 함께 가지는 복합적인 존재2. 스스로 판단하고 행동하는 자율적인 존재캡슐화 : 데이터와 기능을 객체 내부로 함께 묶는 것접근 제어(access control) : 외부에서의 접근을 통제할 수 있는 메커니즘(접근 수정자(access modifier)를 제공)퍼블릭 인터페이스(public interface) : 외부에서 접근 가능한 부분구현(implementation) : 내부에.. 이전 1 2 3 4 5 6 7 ··· 12 다음