Techs 4

Beyond 상속

Python 은 강력한 객체지향을 지원하는 언어 중에 하나이다. 그리고 객체지향에서 반복의 제거와 코드의 재사용성을 높이기 위해 상속이라는 개념을 자주 활용한다. 상속은 강력한 도구 중에 하나이지만 그만큼 큰 잠재적 위험도 가지고 있다. 이러한 위험은 주로 상속받은 클래스가 부모 클래스와 지나치게 높은 결합력을 가지는 데 있어서 발현된다. " 경험상 좋은 코드는 대체로 높은 응집력과 낮은 결합력을 가지고 있었다. " 이러한 리스크를 피하면서 상속을 잘 활용하기 위해서는 먼저 자식 클래스가 상속받은 부모 클래스의 메서드를 적극 활용하는지 확인해 볼 필요가 있다. 만약 대부분의 메서드가 필요하지 않거나 다시 재정의 (overriding)를 해야 한다면 아래와 같은 설계상의 오류를 가지고 있다고 볼 수 있다...

[SW Design] - Defensive Programming

Defensive Programming, 말 그대로 방어적으로 프로그래밍하는 설계 방식이다. 사실 해당 설계 방식은 다른 산업군에서 활용하고 있는 Defensive design을 소프트웨어 버전으로 차용해서 가져온 것이다. 여기서 말하는 defesnsive design을 통해 설계된 제품들은 기대하지 않은 이슈 또는 외부 환경으로 부터 장치나 사용자를 보호하기 위해 나름의 '안전장치'를 설계하여 탑재하고 있다. 그러면 해당 디자인을 차용한 Defensive Programming에서의 안전장치는 어떤 것이고 또 해당 안전장치의 설계를 위해 수행하는 방어적 프로그래밍은 어떤 것을 의미하는 것일까? 먼저 방어적 프로그래밍이 뭔지부터 알아보자 방어적 프로그래밍은 함수 또는 메서드의 모든 부분을 유효하지 않은 모..

Architecture 2023.02.10

[SW Design] - Design by Contract

CS 를 오래 접한 사람이라면 한 번쯤 들어봤을 법한 SW Design 패턴 중에 하나인 Design by Contract. 처음 이 이론이 나온 시점은 대략 1986년, EIffel 이라는 프로그래밍 언어가 개발될 때 컨셉이 제안 됐고, 이후 여러 번의 개선이 있고 나서 대략 2004년쯤 널리 널리 쓰이게 된 이론이다. 해당 이론의 요점은 생각보다 단순한다. 단어 그대로 SW 컴포넌트 단위의 호출을 일련의 '계약'으로 정의하여 관리하는 것. 우리는 일상생활에서 수많은 계약을 접하게 된다. 근로계약서, 부동산계약서, 납품계약서 기타 등등.. 이러한 계약서들을 우리는 왜 작성할까? 아마 계약 당사자간의 계약 내용에 대해서 강제하고 제한하고 명시하기 위해 사용할 것이다. 이 컨셉을 그대로 SW로 가져오면 된..

Architecture 2023.02.08

왜 SW 개발 방법론이 중요할까?

소프트웨어를 설계하고 작성하는 수 많은 방법론이 존재한다. (아마 SW가 운영되는 환경, 조직, 분야의 수만큼이나 다양할 것이다.) 모든 방법론이 추구하고자 하는 목적은 '단단한 소프트웨어를 작성 하는것' 여기서 말하는 단단한 소프트웨어는 아마 견고하며 결함을 최소화하고 코드 스스로가 온전히 자명하도록 하는 소프트웨어 일 것이다. 이러한 목적을 달성하기 위해 패턴화되어 반복 사용되어온 여러 방법론들이 존재한다. DbC, Defensive Programming, SOLID 원칙 등이 패턴화된 방법론들이다. 이러한 방법론들은 최소한의 코드로 고성능의 SW를 작성하고, 체계적으로 DS를 설계하여 공간복잡도와 시간복잡도를 극한으로 줄여나가는 테크니컬 방법론과는 많이 차이가 나는 부분도 있다. (어쩌면 이러한 부..

Opinion 2023.02.06