Refactoring/Clean Coding Skill

클린코더스 강의 내용 정리 #001 - OOP

JeongKyun 2022. 4. 5.

서론

클린 코드에 요즘 부쩍 관심이 많다. 좋은 강의를 찾기 위해 이곳저곳 돌아다니다가 백명석님의 클린코더스 강의를 보게되었다.

 

이 강의는 필자가 짧게 훑어보고 여러 평들을 찾아본 결과 8년전에 업로드한 영상임에도 불구하고 여전히 현직 개발자들에게 좋은 영상을 제공해줄 것이라 생각이 들었다.

 

해당 강의는 따로 이동시간 (출 퇴근)에 시청할 예정이며 느낀점에 대해서만 간략히 정리해 보려 한다. 

 

첫번째 강의는 OOP에 관련된 내용이다.

 


 

"기계가 이해할 수 있는 코드는 어느 바보도 작성할 수 있다.
하지만 인간이 이해할 수 있는 코드는 잘 훈련된 SW 엔지니어만이 작성할 수 있다."

위의 말에 대해 격히 공감하는 바이다. 필자도 회사에서 레거시 코드들을 수정을 해야할 일이 생길 때면 정말 막막하다. 어디서부터 손을 대야할지 모르겠고 또 하나 하나 무슨 내용인지 파악하는데도 굉장히 많은 시간이 소요된다. 

 

영상에서 백명석님도 언급한 내용 중 하나로 재밌는 말이 있는데,

유명 프로그래머인 마틴 골딩(Martin Golding)이 그랬다.

 

"내 소스를 유지보수하게 될 개발자는 내가 어디 살고 있는지 아는 미친 사이코패스일 것이다"

 

참 웃픈 말이다. 사실 회사에서 개발을 하게될 때면 보통의 개발자라면 고품질을 바라보고 시간을 많이 쏟아붇고 싶지만 일정에 쫓겨 일단 기능 구현부터 하게되는 경우가 다반사인 것을 알 것이다.

 

적어도 여지껏 개발일을 하면서 일부러 저품질을 바라보고 개발하는 개발자는 본적이 없다. 이 말은 즉슨 그 누구도 일부러 좋지 않은 소스를 찍어내는 사람은 없을 것이란 말이다.  그렇기에 우리는 더 더욱 초기에 클린 코드에 대한 개념들을 더 잡고 개발을 할 때 이 후 유지보수성을 생각하며 개발 해야한다는 생각이 든다.

 


 

"캡슐화에 집중하라"

백명석님은 해당 강의에서 많이 언급한 것 중 하나가 "캡슐화"였다.

캡슐화를 활용하여 내부적으로 어떻게 구현했는지를 감춰 내부(데이터, 코드)의 클라이언트가 변경되지 않도록 하는 것을 권장하였다. 

 

이렇게 캡슐화를 하면 코드 변경에 따른 비용이 최소화 될 수 있다.

 

Tell, Don`t Ask !

1. 데이터를 요청해서 변경하고 저장하라고 하지말고 기능을 실행하라.

2. Encapsulation이 유지되어 변경에 영향을 안받게 하라.

[예제]
변경 전
if(member.getExpiredDate().getTime() < System.currentTimeMillis){}
변경 후
if(member.isExpired() {}

 

 


 

"객체지향의 재사용성? 상속이 아니다."

우리는 보통 객체지향의 장점을 말해보라면 재사용성을 말한다. 한 스텝 더 나아가 그럼 당신이 말하는 재사용성이 무엇인가요? 물어본다면 보통의 우리는 상속을 이용하여 부모와 자식간의 메서드와 변수들을 재 사용 하는 것이 큰 장점이라고 말할 수 있다.

 

그렇지만 해당 강의에서는 위에서 말한 상속의 개념이 재사용성을 말하는 것이 아닌, Interface를 이용하여 여러 클래스들을 갈아 끼울 수 있도록 구현한 것이 객체지향에서 말하는 진짜 재 사용성을 말하는 것이라는 말을 한다.

 

그 이유는 Interface를 사용하여 외부에서 사용할 함수들을 구현하여 만들어 줄 시 어느 클래스에서든 갈아 끼울 때 쉽다는 것이다. 

 

[Interface의 장점]

테스트를 하기 쉬워진다. 

부가적인 기능을 넣기 쉬워진다.

재 사용을 할 수 있다.

 

 

디테일한 구현체가 변경이 일어나도 본인의 부분은 변경이 안된다는 것이 재사용성이라고 정의 내렸다. 

 

이 내용은 현재로선 그닥 와닿지 않는 말인데 백명석님이 말하길 강의가 끝나면 이해가 갈 것이라 따로 말씀 하신만큼 강의를 듣고 다시 생각해보고 다시 정리해봐야겠다.

 

+++++ 추 가 내 용+++++

"디테일한 구현체가 변경이 일어나도 본인의 부분은 변경이 안된다는 것이 재사용성이라고 정의 내렸다."

이 말에 대해 문뜩 떠올라서 추가 내용으로 작성한다.

 

여러 클래스들이 하나의 interface에서 오버라이드 한 후 구현체 클래스가 되고, 

이 후 상황에 맞게 구현체 클래스를 바꿔 끼울 수 있다.

이것에 대해 말한 것이지 않을까싶다...

반응형

댓글

💲 많이 본 글