타입에 관련된 중요한 사실 타입은 데이터가 어떻게 사용되느냐에 관한 것이다. 숫자는 연산, 문자열은 문자 관련 연산 타입에 속한 데이터를 메모리에 어떻게 표현하는지는 외부로부터 철저하게 감춰진다. 개발자는 해당 데이터 타입의 표현방식을 몰라도 데이터를 사용하는데 지장이 없다. 객체와 타입 객체의 오해 객체를 타입에 따라 분류하고 그 타입에 이름을 붙이는 것은 결국 프로그램에서 사용할 새로운 데이터 타입을 선언하는 것과 같다. 이 말로 봤을 때, 객체가 데이터라는 오해를 불러일으킬 수 있다. 전에도 봤듯이 객체에서 중요한 것은 객체의 행동이다. 객체를 창조할 때 객체가 이웃하는 객체와 협력하기 위해 어떤 행동을 해야할 지 결정하는 것이다. 즉, 객체는 데이터가 아니라는 것이다. 객체의 타입에 중요한 원칙 ..
역할, 책임, 협력(2) 역할, 책임, 협력은 객체 지향 시스템을 만드는 데 필요한 가장 중요한 재료이다. 들어가기에 앞서.. 객체지향 시스템의 목적을 살펴보고 들어가자. ▶ 역할과 책임 속에서 사용자의 요구를 만족시킬 수 있는 기능을 제공하는 동시에 이해하기 쉽고, 단순하며, 유연한 상호작용을 제공하는 객체들의 공동체를 구축한 것이다. 협력 협력은 다수의 연쇄적인 요청과 응답의 흐름으로 구성된다. 책임 어떤 객체가 어떤 요청에 대해 대답해 줄 수 있거나, 적절한 행동을 할 의무가 있는 경우 해당 객체가 책임을 가진다고 말한다. 즉, 어떤 대상에 대한 요청은 그 대상이 요청을 처리할 책임이 있음을 암시한다. 객체의 책임은 객체가 무엇을 알고 있는가와 무엇을 할 수 있는가로 구성된다. 객체의 책임은 일반적..
객체란, 상태, 행동, 식별자 객체의 행동의 결과는 상태에 영향을 받고, 객체는 유일하게 식별이 가능하다. 한 객체에서 상태가 다르면 같은 행동이라도 행동의 결과는 달라지지만 여전히 식별 가능한 객체이다. Ex. 앨리스의 키는 현재 상태에 따라 매우 커질수도 있고, 매우 작아질수도 있으나, 앨리스는 여전히 앨리스이다. 상태 상태를 알면 행동의 결과를 쉽게 예측할 수 있다. 객체의 상태는 정적인 프로퍼티(변하지 않는 상태), 동적인 프로퍼티(시간에 따라 변하는 상태)로 구성된다. 객체의 프로퍼티 객체를 구성하는 단순한 값인 속성과 객체와 객체를 연결하는 링크의 조합을 말한다. 객체는 스스로의 행동에 의해서만 상태가 변경된다. 즉, 외부의 객체 메시지를 통해 객체 스스로가 메시지를 참고하여 상태를 변경하는 ..
실세계와 객체지향 목표 객체지향의 목표는 실세계를 모방한 것이 아니다. 새로운 세계를 창조한 것이다. 가장 큰 차이는 바로 객체 스스로가 행동을 할 수 있다는 것이다. 자동차가 스스로 시동을 걸고, 통장이 스스로 금액을 인출하는 세상. 객체지향의 세상 역할, 책임, 협력 객체 지향에서 가장 중요한 개념 세가지 협력 하나의 복잡한 문제를 해결할 수 있는 공동체를 형성할 수 있게 만든 것이다. 역할과 책임 문제를 해결하기 위해 협력하는 과정 속에서는 각각 특정한 역할을 부여받는다. 손님, 바리스타, 캐시어 역할을 부여받은 역할자는 자신의 역할을 수행하기 위한 책임을 다 해야 한다. 선생님은 학생들을 가르칠 책임이 있다. 역할과 책임은 협력이 원활하게 진행되는데 필요한 핵심적인 구성요소이다. 역할은 책임의 집..
데몬 스레드 일반 스레드의 작업을 돕는 보조 스레드이다. 일반 스레드가 종료되면 데몬 스레드는 자동으로 종료된다. 이 점을 제외하고는 일반 스레드와 동일하다. 데몬 스레드의 예 가비지 컬렉터, 워드프로세서 자동 저장, 화면자동개신 데몬 스레드는 무한루프를 이용해 항시 대기하고 있다가 특정 조건에 만족하면 작업을 수행하고 다시 대기상태에 있는다. 데몬 스레드 관련 메소드 boolean isDaemon() //해당 스레드가 데몬 스레드인지 확인한다. void setDaemon(boolean on) //파라미터 값이 true이면 스레드를 데몬스레드로 변경한다. setDeamon 메소드는 반드시 start()를 호출하기 전에 실행되어야 한다. 호출 후 실행되면 IllegalTrheadStateException이..
Mock 객체 만들기 Mock 객체는 언제 만들까? Service에서 인터페이스를 참조하는데, 로직을 구성할 때 해당 인터페이스에 있는 메소드들을 가져와 로직을 구성하고자 한다. 그러나 인터페이스의 구현체는 따로 구현되어 있지 않다. 이럴 때, 인터페이스가 구현되어 있다는 가정하에 구성한 Service 로직을 실행하고자 할 때 Mock 객체를 만들어 테스트 한다. 이 때, Mock 객체는 참조하는 인터페이스가 되는 것이다. Mock 객체를 만들어보자 @Test void createStudyService() { //1. memberService와 studyRepository를 파라미터로 받아 우리가 구성한 service를 테스트해보려고 하는데, // memberService와 studyRepository는..
Mockito Mock : 진짜 객체와 비슷하게 동작하지만, 프로그래머가 직접 그 객체의 행동을 관리하는 객체. Mockito : Mock 객체를 쉽게 만들고 관리하고 검증할 수 있는 방법을 제공한다. DB, API 호출 시 API 및 DB를 Mock 객체로 만들고 각각의 행동들이 어떻게 동작할지에 대해 Mockito를 사용해서 코딩하며 테스트를 진행한다. - 실제 API가 없거나 DAO나 Repository가 구현되어 있지 않아도 테스트가 가능하다. 스프링 부트와 스프링 부트가 아닐 때 Mockito 1. 스프링 부트를 사용 시 2.2 버전 이후에는 spring-boot-starter-tesat에서 자동으로 Mockito를 추가해준다. 2. 스프링 부트가 아닌 경우 org.mockito mockito-..
JUnit 5: 테스트 인스턴스 테스트 메소드마다 새로운 인스턴스를 만들어 실행한다. //테스트 인스턴스 int value = 1; @Test @DisplayName("스터디 만들기 테스트 인스턴") void testInstance() { System.out.println(this); System.out.println(value++); } @Test @DisplayName("스터디 만들기 테스트 인스턴스 ") void testInstance2() { System.out.println(this); System.out.println(value++); } value 값을 1로 선언 후 각 테스트 메소드에서 value를 증가하여 각각 2 또는 3 이 출력될 거 같지만 결과는 다르다. 둘 다 1이라는 결과가 나타..
- Total
- Today
- Yesterday
- 연관관계
- 팩토리 메소드 패턴
- java8
- try with resources
- mustache
- java
- @Lazy
- effectivejava
- Spring
- package-private
- 자바8
- 김영한
- 스프링부트
- Effective Java
- junit
- 이펙티브자바
- jdk버전
- 빈 순환 참조
- try catch finally
- 생성자
- ifPresent
- flatMap
- 복사 팩토리
- 이펙티브 자바
- 인프런
- 정적팩터리메서드
- springboot
- 점층적 생성 패턴
- 빌더 패턴
- JPA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |