techbook-study / reading-after-work

Day By Day Reading a Book
0 stars 0 forks source link

2023-06-09 퇴근 후 독서 #5

Closed DKKwag closed 1 year ago

DKKwag commented 1 year ago

독서 내용 간략 정리

DKKwag commented 1 year ago

오브젝트

  1. 역할과 협력
    • 객체가 어떤 특정한 협력 안에서 수행하는 책임의 집합을 역할이라고 한다
    • 역할이란 다른 것으로 교체할 수 있는 책임의 집합이다.
    • 역할은 객체를 포괄하는 추상화이다.(추상클래스와 인터페이스를 사용)

동일한 종류의 객체가 하나의 역할을 항상 수행한다면 객체 = 역할 이다. 허나, 어떤 협력에서 하나 이상의 객체가 동일한 책임을 수행할 수 있다면 역할은 서로 다른 방법으로 실행할 수 있는 책임의 집합이다.

  1. 캡슐화
    • 상태와 행동을 하나의 객체 안에 모으는 이유는 객체의 내부 구현을 외부로부터 감추기 위해서이다.
    • 객체지향에서 가장 중요한 원리이다.
    • 객체지향 프로그래밍을 통해 전반적으로 얻을 수 있는 장점은 오직 설계 과정동안 캡슐화를 목표로 인식할 때만 달성될 수 있다
    • 정리) 캡슐화란 변경 가능성이 높은 부분을 객체 내부로 숨기는 추상화 기법
    • 캡슐화의 목표는 유지보수성
limyohwan commented 1 year ago

이펙티브 자바

  1. 문자열 연결은 느리니 주의하라, 문자열을 합치는(+) 로직은 String 대신 StringBuilder를 이용하자

  2. 최적화는 신중히 해라

    • 빠른 프로그램보다는 좋은 프로그램을 작성해라
    • 구현상의 문제는 나중에 최적화할 수 있지만 아키텍처의 결함이 성능을 제한하는 상황이라면 해결하기 힘들다
    • 성능을 제한하는 설계를 피하며 최적화 시도 전후로 성능을 측정하라
    • 빠른 프로그램을 작성하려 안달하지 말고 좋은 프로그램을 작성하면 성능은 따라온다.
      (맹목적인 어리석음을 포함해) 그 어떤 핑계보다 효율성이라는 이름 아래 행해진 컴퓨팅 최악이 많다(심지어 효율을 높이지도 못하면서) - 윌리엄 울프
      (전체의 97% 정도인) 자그마한 효율성은 모두 잊자. 섣부른 최적화가 만악의 근원이다 - 도널드 크누스
      최적화를 할 때는 다음 두 규칙을 따르라
      첫번째, 하지 마라
      두번쨰, (전문가 한정) 아직 하지 마라. 다시 말해, 완전히 명백하고 최적화되지 않은 해법을 찾을 때까지는 하지마라 - M.A. 잭슨
  3. 일반적으로 통용되는 명명 규칙을 따르라

    • 패키지 모듈 = org.junit.jupiter.api, com.google.common.collect
    • 클래스와 인터페이스 = Stream, FutureTask, LinkedHashMap, HttpClient
    • 메서드와 필드 = remove, groupingBy, getCrc
    • 상수 필드 = MIN_VALUE, NEGATIVE_INFINITY
    • 지역변수 = I, denom, houseNum
    • 타입 매개변수 = T, E, K, V, X, R, U, V, T1, T2
  4. 복구할 수 있는 상황에서는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라

OikimiO commented 1 year ago

함수 인수(P50)



}

  1. 인수를 뭔가로 변환해 결과를 반환하는 경우 InputStream fileOpen("MyFile"){ ... return MyFile의 InputStream; }

...


- 하나는 인수에 질문을 던지는 경우입니다. 
- 예시로 boolean fileExists("MyFile")는 String형 파일 이름이 존재하는지 여부를 묻는 것을 알 수 있습니다.
- 다른 하나는 인수를 뭔가로 변환해 결과를 반환하는 경우입니다. 
- 예시로 InputStream fileOpen("MyFile")은 String형 파일을 InputStream으로 변환한다는 것을 알 수 있습니다.

<br/>

- 이항(2개의 인수)의 경우 필요에 따라 인수를 추가할 수 있습니다. 
```java
...
class Point{
  1. 직교 좌표를 받는 경우
  public Point(int x, int y){
   this.x = x;
   this.y = y;
   ...
  }
}

class Main{
  public goMap(){
    Point targetPoint = new Point(124, 35);
    ...
  }
}

...