전체 글 98

[객체지향의 사실과 오해] 5장 책임과 메세지

책임과 메시지 책을 읽고 개인적으로 받아들인 내용을 정리하는 공간이라 틀린 점이 있을 수 있습니다. 언제나 틀린 부분에 대한 논의는 환영합니다 !! 자율적인 책임 자율성 : 자기 스스로의 원칙에 따라 어떤 일을 하거나 자신을 통제해서 절제하는 성질이나 특성. 요청을 해결하기 위하여 객체가 수행하는 내용 = 책임 객체에게 주어지는 책임은 자율적이 여야 한다(알아서 처리하도록 내버려두어야 한다) 적절한 책임이 자율적인 객체를 낳고 , 자율적인 객체들이 모여 유연하고 단순한 협력을 낳는다 자율적이지 못하다? 예를 들어 왕이 모자장수에게 단순히 증언하세요! 가 아닌 목격했던 장면을 떠올리고 , 행동과 함께 증언하세요 이런 식으로 왈가왈부하면 모자장수 입장에서는 화날 듯!! 자율적이지 못하니깐. 알아서 증언하라 ..

도서 2022.11.17

[JAVA] immutable 객체?방어적 복사?

immutable 객체?방어적 복사? immutable한 객체...?? 클린코드 교육을 들으며 정말 많이 들었지만 무언가 겉핥기로 아는 것 같아서 정리해보려고 한다!!!! Immuable object 정의 객체 지향 프로그래밍에 있어서 불변객체(immutable object)는 생성 후 그 상태를 바꿀 수 없는 객체를 말한다. 반대 개념으로는 가변(mutable) 객체로 생성 후에도 상태를 변경할 수 있다. 객체 전체가 불변인 것도 있고, C++에서 const 데이터 멤버를 사용하는 경우와 같이 일부 속성만 불변인 것도 있다. 또, 경우에 따라서는 내부에서 사용하는 속성이 변화해도 외부에서 그 객체의 상태가 변하지 않은 것 처럼 보인다면 불변 객체로 보기도 한다. 예를 들어, 비용이 큰 계산의 결과를 캐..

[Effective Java] 2. 생성자에 매개변수가 많다면 Builder를 고려하라

문제 상황 오 딱 요즘 고민인 상황에 걸맞은 지식인듯하다. 정적 팩토리를 쓰던, 생성자를 사용하던 매개변수가 달라지면 메서드가 너무 많이 추가되는 어려움이 있었다. 예를 들면 public static Question newQuestion(long id, String title, String contents) { return new Question(id, title, contents,null); } public static Question newQuestionWithDeleted(Long id, String title, String contents, boolean status) { return new Question(id, title, contents, status); } private Question(L..

도서 2022.11.14

[Effective Java] 1. 생성자 대신 팩터리 메서드를 고려하라

클래스는 생성자와 별도로 정적 팩터리 메서드를 가질 수 있다. 예를 들어 다음과 같이 public생성자 대신 정적 팩토리 메서드를 제공할 수 있다. //정적 팩토리 메서드 public static Question newQuestion(Long id, String title, String contents) { return new Question(id, title, contents); } //생성자 private Question(long id, String title, String contents) { super(id); this.title = title; this.contents = contents; } 장점 이름을 가질 수 있다. 딱 보기에도 생성자로 인스턴스를 생성하려면 new Qustion()으로만 ..

도서 2022.11.12

[TDD,클린코드 with 자바] 1,2차 라이브 강의 정리

[TDD, 클린 코드 with 자바 15기]에 참여하고 종강이 일주일 앞으로 다가왔다 차차 배운것들을 정리해보려고 한다. OOP와 TDD에 무지했던 나로서는 정말 배운 게 많은 것 같다. 앞으로 카테고리당 세부적으로 포스팅을 해볼 예정이다! 1차 라이브 강의 TDD 사이클 팁 기능 목록을 먼저 작성하세요 Util성격의 기능이 TDD로 도전하기 좋음 로직의 복잡도가 낮으면서 단위 테스트가 가능한 기능을 TDD로 도전한다. 로직의 복잡도가 높으면서 단위 테스트 가능한 기능을 TDD로 도전 여기뿐만 아니라 코드 리뷰에서도 Util성격으로 바꿔 보자는 코멘트를 많이 받아서 Util코드란 무엇인지는 따로 포스팅하겠다. 마지막 상태를 알면 TDD하기가 쉬워진다. ex ) new Car()로만 생성하면 Car car..

[객체 지향의 사실과 오해] 4. 역할 ,책임,협력

4장 인간의 행동을 결정하는 것은 그 사람이 어느 상황에 처해있느냐. 인간의 행동을 결정하는 문맥은 타인과의 협력이다. 객체 지향의 세계에 입문한 사람들이 가장 흔히 하는 실수 → 객체가 가져야할 상태와 행동부터 고려한다는 것이다. 중요한 것은 객체들 사이에 이루어지는 협력이다. 협력 협력은 한 사람이 다른 사람에게 도움을 요청할 때 시작된다. ex ) 재판 속에서의 협력 재판장은 증인을 부를 것을 요청,증언할 것을 요청 왕 - 토끼 - 증인 사이의 협력 특정한 요청을 받아들일 수 있는 것은 , 객체가 그 요청을 수행할 수 있는 지식과 행동 방식을 가지고 있기 때문이다. = 해당 객체가 책임을 가지고 있다. 요청과 의무는 객체의 책임을 결정한다 책임 요청과 응답을 할 의무가 있는 경우 책임이 있다. 무엇..

도서 2022.11.03

[객체 지향의 사실과 오해] 3. 타입과 추상화

땅은 구불 구불 하지만 지하철 노선도는 직선으로 이루어져있다 . 이렇듯 승객이 꼭 알아야하는 사실만 정확하게 표현하고 몰라도 되는 정보는 무시함으로써 이해하기 쉽고 단순하며 목적에 부합하게 만듬. -> 추상화 추상화란? 현실에서 출발하되 불필요한 부분을 도려내가면서 사물의 놀라운 본질을 드러나게 하는 과정. 복잡성을 다루기 위해 추상화는 두 차원에서 이루어짐. 1. 공통점은 취하고 차이점은 버리는 단순화 2. 중요한 부분을 강조하기 위한 불필요한 세부 사항 제거 공통점을 기반으로 객체들을 묶기 위한 그릇을 개념이라고 한다. 인간,자동차,모니터,글자,책 .. 개념을 이용하여 여러 객체로 classfication(분류) 가능 개념 그룹의 일원이 될 때 인스턴스라고 할 수 있다. 개념 1. 심볼 -> 말 그대..

도서 2022.11.02

[객체 지향의 사실과 오해] 2.이상한 나라의 객체

세상을 더 작은 객체로 분해하는 것은 본질적으로 세상이 포함하고 있는 복잡성을 극복하기 위한 인간의 작은 몸부림이다. 객체란 인간이 분명하게 인지하고 구별할 수 있는 물리적인 또는 개념적인 경계를 지닌 어떤 것이다. 앨리스의 상태를 결정하는 것은 행동이지만 행동의 결과를 결정하는 것은 상태이다. 앨리스가 한 행동의 결과는 앨리스의 상태에 의존적이다 (158 인 사람이 10을 먹으면 168이지만 198인 사람이 10이 크면 208이겠지) 행동의 결과는 앨리스의 위치라는 상태를 이용해 쉽게 설명할 수 있다. 객체는 식별 가능한 개체 또는 사물이다. 객체는 자동차처럼 만질 수 있는 구체적인 사물일 수도 있고, 시간처럼 추상적인 개념일 수도 있다. 객체는 구별 가능한 식별자,특징적인 행동 변경가능한 상태를 가진..

도서 2022.10.27

[한이음 프로젝트]OAuth2 - Google 구현(+Spring Security 동작 원리)

google Oauth2를 구현해보겠다. 1. 일단 google에 사용자 인증 정보를 등록한 뒤, 정보를 받아온다.(이 부분은 구글링을 하면 더 자세하게 많이 나온다) 2.build.gradle spring-security Spring Security는 스프링 기반의 어플리케이션 보안을 담당하는 프레임워크입니다. Spring Security를 사용하면 사용자 인증, 권한, 보안처리를 간단하지만 강력하게 구현 할 수 있습니다. implementation 'org.springframework.boot:spring-boot-starter-security' jwt 모듈 implementation 'io.jsonwebtoken:jjwt-api:0.11.5' implementation 'io.jsonwebtoken..

[객체 지향의 사실과 오해] 1. 협력하는 객체들의 공동체

최근 클리코드와 한이음 프로젝트에서 OOP에 대해 많이 언급되고 있다. 따라서 멘토님이 추천해준 책을 사서 읽어보고 있다. 주절주절 설명은 하지 않고 내가 밑줄 친 부분만 끄적끄적 해보겠다. 객체지향의 목표는 실세계를 모방하는 것이 아니라 오히려 새로운 세계를 창조하는 것이다. 그럼에도 왜 실세계를 모방한다고 할까? 객체를 스스로 생각하고 스스로 결정하는 현실세계의 생명체에 비유하는 것은 상태와 행위를 캡슐화하는 소프트웨어 객체의 자율성을 설명하는데 효과적이기 떄문이다. 객체 지향의 개념을 훌룡한 프로그램을 설게하고 구혆는데에는 부적합하지만 객체 지향의 관점을 설명하기에는 실세계를 모방했다고 해도 goodd 요청과 응답으로 구성된 협력 일상에서 혼자 힘으로 해결하기 힘든 것을 다른 사람에게 도움을 요청한..

도서 2022.10.06
728x90