-
객체 지향이 추구하는것을 이해하고 클래스를 설계하기 위한 지식, 디자인 패턴개발/생각 2022. 5. 16. 17:33
책은 생각 정리에 큰 도움이 된다. 내가 객체지향을 아는데 몰랐던 이유를 이제 조금 알게 되었다.
객체 지향 언어 (Object-oriented programming, OOP)
객체 지향에 대한 이야기는 개발을 공부할 때, 어떤 경로로든 알게 된다. 심지어 대학교에서도 가르쳐주는 개념이다. 하지만 그 깊이와 그 중요성을 알려주는 곳이 적을 뿐더러, 이해의 필요성을 호소하는 사람은 더더욱 없었다. 하물며 지금의 내가 공부할 때 당시의 나에게 가르쳐주려고 시도했다 한들 그 필요성을 제대로 깨달을 수 있었을까?
클래스, 객체(인스턴스), 메서드(메소드), 메시지
객체 지향의 구성 요소의 사전적인 의미는 누구나 배운다. 이게 무엇이냐 물었을 때 그럴싸한 대답을 할 수 있다.
속성과 행위, 그리고 그 연관 관계들. 정의인가, 메모리에 실제로 할당된 것인가 등등
분명 객체 지향이 무엇인지는 알고 있다. 그런데 객체 지향은 개념을 읽어보고 이해했다고 하기에는 너무도 복잡하고 방대할뿐더러 개발할 때는 직접적인 제약도 없다. 제약이 없다보니 C++, Java 등 객체 지향 프로그램 언어를 C언어로 그대로 옮길 수 있는 코드가 자주 등장하지 않는가. 이런 비극적인 일은 객체 지향에 대한 배경지식을 가진 사람이 디자인 패턴을 공부함으로써 객체 지향적 설계 능력을 갖추어서 막을 수 있다고 생각한다.
이 "객체 지향적 설계(디자인) 능력" 이 없을때의 나는 아래 세가지 케이스에 어떤 문제가 있는지 정말 도무지, 어떻게 생각을 해도 잘못되었다는것을 전혀 인지할 수 없었다.
1. 하나의 큰 클래스를 설계하고 그 안에 모든 동작을 구현하기
2. 비슷한 기능을 하는 클래스를 상속해서 재사용 하기
3. 자료 관리 구조를 만들기 위해 기존 자료형을 상속하고 기능을 추가하기
클래스가 동작하려면 구현해야 하는것이 아닌가, 재사용을 안하려고 상속해서 사용하는것이 아닌가, 기존 자료형을 잘 만들어놨으니 상속받아 쓰면 되는것이 아닌가...
큰 클래스와 그 안의 구현 클래스가 분리, 상속의 기본적인 전제, 자료구조를 상속하는게 어떤 경우인지를 책을 읽다가 알았는데 내 입장에선 유레카 급으로 충격적인(!) 사상의 지각변동이 일어났다.
텔레그램 봇을 사용해서 봇을 만들 때, 정말 몇가지 없는 기능임에도 불구하고 기능을 덧붙이기 어려웠던 이유
명세대로 프로그램을 개발했는데 이후에 수정사항을 반영하기 어려운 이유
레거시 프로그램을 유지보수 할 때 기능을 수정하였는데 예상하지 못한 곳에서 이슈가 발생하는 이유
이 모든것은 모든 일을 이미 겪고 앞서 나가있는 개발자들의 피와 눈물로 닦아져 있었다. 당시에는 와닿지 않았지만 이제 생각해보면 많은 사람들이 객체지향이 중요(소중)함을 가르쳐주고 싶어했다. 굉장히 오래된 프로그램을 손보고 있는 내가 보기엔 "이렇게 하지 않으면..." 이라는 예시는 모두 내 이야기였다.
모르는것이 부끄러운것이 아니라 한들, 지금까지 몰랐다는것을 정당화 할 순 없다. 공부하자.
'개발 > 생각' 카테고리의 다른 글
소프트웨어 개발자에게 어떤게 요구사항일까 (0) 2024.02.18 테스트 코드의 필요성을 깨닫다 (0) 2022.05.06