본문 바로가기

길게 쓰기/객체지향의 탄생 (공식)

정의와 목표의 전환2-한두깨 객체지향 프로그래밍 미리보기

한번 읽고 두번 깨닫는 객체지향 프로그래밍 미리보기



책이 2019년 1월말에 출간 예정인데 블로그 독자들에게 미리보기를 제공합니다.


보시고 댓글과 질문 많이 남겨주시면 감사합니다. +.+



3) 유연한 소프트웨어란 코드 품질 향상이다.

 

(1) 유연한 소프트웨어는 코드 품질이 좋다는 의미

소프트웨어를 개발할 때, 우리는 먼저 고객이 원하는 기능을 정확히 구현해야 한다. 그리고 여기에 하나 더 추가해야 한다. 바로 유연한 소프트웨어 개발이다. 우리는 고객이 원하는 기능을 정확하고 유연하게 구현해야 한다.

 

※ 고객이 원하는 좋은 소프트웨어 = 고객이 원하는 기능의 정확한 구현 + 유연한 구성

 

당장 기능 구현도 어려운데, 이런 유연한 가치까지 신경 써서 개발하라니, 더 어렵게 느껴질 것이다. 그러나 유연한 소프트웨어를 만들겠다는 결심과 노력을 하지 않으면, 위에서 설명했던 코드 품질의 저하 문제가 발생해, 우리한테도 직접적인 피해가 닥친다. 예를 들면, 여행 갈 때 내가 몰던 자동차의 정비를 소홀히 해서, 고속도로 한복판에서 차가 멈출 때의 당혹감과 짜증을 소프트웨어 개발에서 경험할 수도 있다.

유연함의 사전적인 뜻은 부드럽고 연하다는 뜻이다. 소프트웨어에서 부드럽고 연하다는 것은 코드 품질이 좋다는 것이다. 위에서 정리했던 코드 품질 저하 흐름도를 반대로 해석하면 된다.

 

개발자의 역량 부족 또는 열악한 환경 → 기능 구현 중심에 매몰 → 유연한 소프트웨어를 지향하지 못함에서 그치지 않고 해를 끼침 → 코드 중복 + 코드 속성의 과도한 노출 + 코드 메소드의 과도한 노출 + 코드 배치의 일관성이 없다. → 코드의 가독성 저하 + 코드의 의존성 증가 → 사이드 이펙트 증가 + 코드 재사용 어려움 → 코드의 수정, 확장, 디버그가 어려워진다. → 유지보수와 대규모 확장 개발하기 어려워진다.

 

유연한 소프트웨어란, 코드 중복이 거의 없고, 코드 속성과 메소드의 캡슐화가 잘 되어 있고, 코드 배치의 일관성이 잘 지켜져서, 코드의 가독성이 좋고, 코드의 의존성이 낮다. 그래서 사이드 이펙트가 줄어들고, 코드 재사용이 쉽다. 그러니 코드의 수정, 확장, 디버그가 수월하다. 결국 결국 유지보수와 대규모 확장 개발(고도화 프로젝트)하기 좋다는 의미이다.

 

고객이 원하는 좋은 소프트웨어 = 고객이 원하는 기능의 정확한 구현 + 유연한 구성 = 유연한 소프트웨어 = 좋은 코드 품질 = 코드 중복이 없다. + 코드 속성과 메소드의 캡슐화가 잘 되어 있다. + 코드배치의 일관성이 잘 지켜졌다. → 코드 가독성이 좋다 + 코드의 의존성이 낮아진다. → 사이드 이펙트 감소 + 코드 재사용이 쉽다 → 코드 수정, 확장, 디버그가 수월하다. → 유지보수와 대규모 확장 개발하기 편하다.

 

(2) 유연한 소프트웨어가 되었을 때

 

코드의 중복이 거의 없다

유연한 소프트웨어를 위해 객체지향 개발을 추구했다면, 하나의 클래스는 하나의 일만 해야 한다 등의 원칙을 잘 지켰을 것이기 때문에, 코드의 중복이 거의 없어진다.

 

코드 속성과 메소드의 캡슐화가 잘 되어 있다

유연한 소프트웨어를 위해 객체지향 개발을 추구했다면, 캡슐화 원칙을 잘 지켰을 것이고, 보호해야할 속성, 감춰야할 메소드가 잘 정리되어 있다. 그래서 코드의 의존성이 낮아지고 가독성이 좋아지는 좋은 결과로 이어진다.

 

코드 배치의 일관성이 잘 지켜졌다.

유연한 소프트웨어를 위해 객체지향 개발을 추구했다면, 메소드는 자신의 이름과 일치하는 하나의 로직만 담겨 있고, 전역 변수, 지역 변수 배치의 일관성이 있고, 다른 클래스에 무질서하게 의존하지 않는다.

1단계 좋은 효과는 다시 2단계 좋은 효과로 이어진다.

 

코드 가독성이 좋다

좋은 개발자는 코드에 주석을 달고 띄어쓰기를 일관되게 하는 가독성 향상 작업을 한다. 이 것은 기본이고, 덧붙여 유연한 소프트웨어를 추구하면 가독성이 더 좋아진다. 유연한 소프트웨어는 클래스의 속성과 메소드가 필요한 분량만 있다. 메소드 내부의 로직/코드의 길이가 너무 짧지도 너무 길지도 않다. 더 나아가 객체지향을 잘 알고 개발을 많이 해본 개발자라면 유연한 코드를 볼 때 느낌이 온다. , 이 코드는 깔끔하고 깊이가 느껴지는구나. 하는.

 

코드의 의존성이 낮다

유연한 소프트웨어는 각 클래스, 메소드, 속성의 역할이 명확하기 때문에 의존을 연결할 때 어떻게 효과적으로 의존할지 눈에 잘 들어오고, 필요한 코드에만 의존할 수 있게 된다.

1단계, 2단계 효과는 이제 3단계 좋은 효과를 가져온다.

 

사이드 이펙트가 감소했다

코드 의존성이 낮아지고 코드 가독성이 좋기 때문에, 코드 수정 할 때 비교적 안심하고 수정할 수 있고, 수정 후 버그가 없는지 테스트하기도 수월하다.

 

코드 재사용이 쉽다

코드 의존성이 낮아지고 가독성이 좋아지는 등의 코드 품질이 좋으면 코드를 모듈화하기 좋아진다. 코드 재사용이 좋아지면 개발 생산성이 부쩍 향상된다.

1단계, 2단계, 3단계 효과로 4단계인 수정을 쉽게 할 수 있다.

 

코드 수정, 추가, 디버그가 수월하다

실무에서 버그 잡는 일은 개발하는 것만큼 중요하다. 예를 들어 내 경험상 프로젝트가 끝난 초기 3개월 동안은 버그를 많이 잡는 시기였다. 만약 처음부터 유연한 소프트웨어를 지향했다면, 버그 잡는 기간을 3개월에서 더 줄일 수 있다. 버그를 잡는 작업은, 결국 코드를 수정하는 작업과 같다. 그래서 코드 품질이 좋아지면 수정 작업을 편하게 할 수 있다.

1단계, 2단계, 3단계, 4단계 효과로 인해 소프트웨어 관리 여건을 개선시킨다.

 

유지보수와 고도화 프로젝트하기 좋다

만약 기존 소프트웨어를 유연하게 개발해서 유지보수를 잘 할 수 있다면, 고객의 수정, 확장 요구사항을 더 빠르게 구현할 수 있기 때문에 고객은 더욱 만족한다. 개발자는 개발 생산성이 높아져 업무가 보다 더 즐거워진다. 나중에는, 더 나은 여건으로 고도화 프로젝트를 할 수 있다.