Fact
- 아침에 프로그래머스에 있는 ”평균 구하기”라는 문제를 Java로 풀었다. 테스트 짜는 데만 20분 걸렸다. test를 짠 후에 문제를 풀기 시작했다. 문제를 풀 때 배열에 대한 내장 함수를 쓰기 위해서 인터넷에 공부를 했다. 배열에 내장 함수를 쓰기 위해서 stream을 썼다. 그리고 마지막으로 문제를 풀기 위해서 average() 와 getAsDouble() 을 썼다.
- 문제를 푼 후에 todolist를 수정하기 위해서 책의 지식이 필요하다고 피드백을 받아서 책을 읽었다. 객체 지향 사실과 오해 1~3장을 읽었다. 읽다가 중간에 다른 동료들과 함께 1~2장에 대한 스터디를 했다. 어떤 부분에서 궁금한 게 있었는지 질문을 하고 어떤 게 중요하다고 생각한 지에 대한 의견 교환 등을 했다.
- 저번 프로젝트에서 config의 env 파일에 awsconfig가 없어도 되는지 확인 작업을 했다. 확인하니 없어도 잘 작동이 됐다. 확인하기 위해서 env 파일에 있는 설정을 지워보고 console로 aws key 값들이 잘 들어오는지 확인을 했다. 이 확인을 한 이유는 다른 사람이 나랑 비슷하게 코드를 짰는데 나는 되고 그 사람이 안돼서 확인차 작업을 했다.
Feelings
- 객체지향 퉷
- 객체지향 사실과 오해 pg 95에 있는 문장 ”앨리스가 그들을(트럼프(퀸, 킹, 정원사 등)) 동일한 타입으로 분류한 이유는 그들이 한 방식에 따라 행동했기 때문이다. 그들은 몸이 납작하기 때문에 종이처럼 납작 엎드릴 수 있고…”의 비유는 솔직히 너무 억지다. 당연히 앨리스가 그들을 보고 생김새가 몸이 납작하고 다 비슷하게 생겼으니 동일한 타입으로 묶는 것을 초등학생도 알겠다. 누가 엎드릴 수 있고 뒤집어질 수 있어서 같은 타입으로 묶지. 물론 어떤 말을 하고 싶은지 알지만 이 부분은 좀 수정이 필요할 것 같다.
Findings
- 스트림은 객체 컬렉션을 처리하는 데 사용된다. 스트림은 원하는 결과를 내기 위해 파이프라인으로 연결할 수 있는 다양한 메서드를 지원하는 일련의 객체다. map, filter, sorted, collect, forEach, reduce를 쓸 수 있다.
Arrays.stream(new int[] {1, 2, 3}).map(n-> 2*n+1).average()
$4 ==> OptionalDouble[5.0]
Optional은 null 대신 쓰는 값이라고 한다. null이 들어오면 문제가 생기므로 null을 바로 줘서 에러 띄우지 않고 Optional로 null이 들어오는지 아니면 다른게 들어오는지 중간에 처리해 주는 것이다.
그래서 예를 들자면 위에 명령어 뒤에
ifPresent(System.out::println);
를 넣어주면 있으면 안에 있는 print가 실행된다.
- 객체에 역할이 부여되고 그 역할에 맞는 책임들이 있다.
- 객체들 간에 협력이 있고 협력을 하기 위해서 요청과 응답으로 구성되어 있다.
- 객체는 애플리케이션의 기능을 구현하기 위해 존재한다. 객체 하나에 모든 기능을 넣지 않고 분할해서 객체들 간의 협력을 하게끔 만들어서 기능이 원활하게 돌아가게 하는 게 객체지향이다.
- 객체는 상태와 행동을 가지고 있는데 객체를 정의하는 게 상태가 아닌 그 객체가 쓸 수 있는 행동들에 의하여 정의가 된다. 이 행동으로 객체의 상태가 결정된다.
- 객체가 협력을 할 때 다른 객체에게 메시지를 주고 이 메시지를 주는 송신자는 메시지를 받는 수신자의 상태를 몰라야 하고 메시지를 어떻게 처리하는지 몰라야 한다. 메시지를 어떻게 처리할지는 수신자 객체의 마음이고 이것을 객체 간의 자율성을 보장한다. 이 개념은 캡슐화의 한 속성이다.
- 객체 지향적인 설계는 현실을 모방하는 것보단 은유적으로 표현하는 것이다. 현실 세계 모델이랑 비슷한 역할을 하지만 세세하게 보면 현실 모델 보다 하는 게 많다.
- 객체지향적으로 짤 때 객체를 추상화를 해야 한다. 이것을 하기 위해서 객체를 만들 때 필요 없는 부분을 다 쳐내므로 꼭 필요한 점을 강조해서 쓴다. 또는 객체들의 차이점을 지우고 비슷한 부분을 보고 객체를 통합해서 한 그룹으로 볼 수도 있다. 그룹으로 묶어서 보기 위해서 객체들이 같은 개념을 가지고 있어야 한다.
- 객체의 개념은 객체를 표현할 수 있는 말, 아이디어, 의미, 등이다.
- 객체의 개념은 세 가지 관점이 있다. 심볼, 내연, 외연. 심볼은 객체를 나타내는 이름이나 명칭, 내연은 심볼을 가장 잘 나타내는 설명, 외연은 심볼들의 set이다. 내연은 객체의 상태로 설명하기보다는 객체의 행동으로 구분한다. 그래서 같은 행동을 하는 객체는 같은 type로 본다.
Future Action
- Java로 todolist를 만들면서 객체지향이 뭔지도 모르고 짜고 있었다. 그래서 그런지 피드백 받을 때마다 퇴짜를 맞고. 그래서 오늘은 객체지향에 대한 책을 읽었는데 확실히 조금 더 잘 알게 되었다. 다음부터 무엇을 짜야 할 때 그것을 공부를 다 까진 아니라도 어느 정도 개념을 잡아 놓고 짜자.