본문 바로가기

클린 코드

클린 코드 OOP 2

절차 지향 방식 stop watch

시작 시간 구하고 -> 어떤 동작을 수행하고 -> 끝나는 시간 구하고 -> 경과 시간 구한다.

밀리 초가 아닌 나노 초를 구한다고 할 때 변수 명과 메서드 명이 모두 변경되어야 한다.

절차 지향의 한계 : 요구사항 변경이 데이터 구조 변경을 유발

 

객체 지향 방식

값을 직접 사용하는 게 아니라 stopWatch 인스턴스의 start() 메서드를 호출한다.

시작, 끝 시간을 구하는 메서드 명은 변경되지 않고 경과 시간을 구하는 메서드 명(밀리 초에서 나노 초)만 추가해주면 된다.

 

interface를 준수하고 추상화를 잘 하면 클라이언트 영향을 최소화할 수 있다.

 

상속을 통한 재사용 및 추가 기능을 통한 확장

1. 서브 클래스는 수퍼 클래스의 기능을 재사용. 추가적인 기능 제공이 쉽다.

2. 변경의 유연함 측면에서 치명적 단점이 있다.

  • 수퍼 클래스의 변경이 다수의 서브 클래스에 영향을 미친다.
  • 유사한 기능의 확장에서 클래스의 개수가 불필요하게 증가할 수 있다.
    • 2개 이상의 수퍼 클래스의 기능이 필요한 경우. 다중상속이 불가능할 때, 1개를 상속 받고 다른 한 개는 따로 구현하게 되는 문제가 생긴다.
  • 잘못된 상속 사용
    • 클래스를 상속받은 인스턴스가 여러가지 동작을 동시에 해야하는(수하물을 제거하고, 적재 가능한 무게를 증가시킴) 경우에 단순히 수하물 제거만 해버리는 경우가 있을 수 있다. 수퍼 클래스의 메서드를 사용하지 않고 ArrayList를 상속받은 수퍼 클래스이기 때문에 remove() 함수를 바로 쓰는 경우. 이를 방지하려면 수퍼클래스에서 ArrayList를 상속받지 말고 ArrayList객체를 수퍼클래스에서 사용해서 remove()를 아예 못쓰게 한다.

클래스에 기능을 다 넣는 게 아니라 클래스 내에 외부 클래스를 사용하게 해서 연결 고리(의존성 주입, Dependency Injection)를 만든다

  • 유연성 증가
  • unit test 용이
  • TDD 용이
  • Interface 중요성

Inheritance VS Delegation

상속이 아니어도 기능을 재사용할 수 있다.

 

출처 https://www.youtube.com/watch?v=D8_mbdoGPrg&list=PLuLb6MC4SOvXCRePHrb4e-EYadjZ9KHyH&index=2

'클린 코드' 카테고리의 다른 글

클린 코드 function structure 2  (0) 2019.12.10
클린 코드 function structure  (0) 2019.12.10
클린 코드 function 2  (0) 2019.12.10
클린 코드 function  (0) 2019.12.10
클린 코드 소개 및 OOP  (0) 2019.12.04