rectangle refactor

튜플에서 구조체로 옮기면 계산 의도가 코드에 남는다

width와 height를 별도 인수나 튜플 인덱스로 넘기는 대신 Rectangle 타입으로 묶으면 area 함수의 의미가 선명해집니다.

Separate values

Separate values

width1, height1은 서로 관련된 값이라는 사실을 함수 밖에서만 알 수 있습니다.

Tuple

Tuple

인수는 하나가 되지만 dimensions.0과 .1의 의미를 기억해야 합니다.

Struct

Struct

Rectangle { width, height }는 데이터 이름과 계산 목적을 함께 보존합니다.

Debug derive

Debug derive

#[derive(Debug)]와 dbg!로 필드 값을 개발자 친화적으로 확인합니다.

빌림 area(&rect1)는 소유권을 가져가지 않고 넓이 계산에 필요한 값만 읽습니다.
출력 형식 {}는 Display가 필요하고 {:?}는 Debug 구현이 필요합니다.
리팩터링 기준 값의 개수가 아니라 함께 변해야 하는 의미가 있는지를 기준으로 묶습니다.

구조체 리팩터링의 효과는 타입 안전성, 함수 의도, 디버깅 가능성이 동시에 좋아지는 데 있습니다.