노개북 클린코드 12일차

ki hyun Lee·2022년 3월 1일
0

노개북

목록 보기
8/16

TIL (Today I Learned)

2022.03.01

오늘 읽은 범위

6장. 객체와 자료 구조

책에서 기억하고 싶은 내용을 써보세요.

  • 자료를 세세하게 공개하기보다는 추상적인 개념으로 표현하는 편이 좋다. ... 개발자는 객체가 포함하는 자료를 표현할 가장 좋은 방법을 심각하게 고민해야 한다. (p.119)

  • 절차적인 코드는 기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉽다. 반면, 객체 지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽다.

public class Square {
    public Point topLeft;
    public double side;
}

public class Rectangle {
    public Point topLeft;
    public double height;
    public double width;
}

public class Circle { 
    public Point center;
    public double radius;
}

public class Geometry {
    public final double PI = 3.141592653589793;
    
    public double area(Object shape) throws NoSuchShapeException 
    {
        if (shape instanceof Square) { 
            Square s = (Square)shape;
            return s.side * s.side; 
        }
		else if (shape instanceof Rectangle) { 
            Rectangle r = (Rectangle)shape;
            return r.height * r.width;
		}
		else if (shape instanceof Circle) {
			Circle c = (Circle)shape;
			return PI * c.radius * c.radius;
        }
        throw new NoSuchShapeException();
    }
}

위 코드는 절차적인 코드이다. 따라서 기존 자료구조 Square, Rectangle, Circle 을 변경하지 않고 Geometry 만 변경하여 새로운 함수를 추가하기 쉽다.

public class Square implements Shape { 
    private Point topLeft;
    private double side;
    
    public double area() { 
        return side*side;
	}
}

public class Rectangle implements Shape {
    private Point topLeft;
    private double height;
    private double width;
    
    public double area() { 
        return height * width;
    } 
}

public class Circle implements Shape { 
    private Point center;
    private double radius;
    public final double PI = 3.141592653589793;
    
    public double area() {
        return PI * radius * radius;
    }
}

반면 위와 같이 객체 지향적인 코드는 기존 함수를 변경하지 않으면서 새로운 클래스를 추가하기 쉽지만, 새로운 함수를 추가하기 위해서는 모든 클래스를 고쳐야 한다는 단점이 있다.

  • 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다. (p.123)

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요

일단 한 마디로 표현하자면 내가 객체 지향에 대해 정말로 무지하다는 것을 깨달았다. 저자가 말하려고 하는 의도를 거의 파악하지 못하였지만 어떤 것을 말하고 싶어하는지 대충은 알 것 같다. 앞으로 객체 지향에 대해서도 더욱 공부를 해야할 것 같다.

profile
Full Stack Developer at Team Verse

0개의 댓글