개발자 99% 커뮤니티에서 수다 떨어요!
💡 연습문제 2. 객체 지향 언어와 함수형 언어의 직교성은 어떻게 다를까? 이런 차이가 언어 자체에 내재된 것일까 아니면 사람들이 언어를 사용하는 방법이 다른 것일까?
우선 직교성이란 단어의 정의에 대해 다시 한 번 되짚어 보겠습니다.
직교성이란 직관적으로는 두 벡터가 서로 직각으로 만난다는 뜻입니다.
SW 개발에 비유하자면 루틴이나 클래스를 만들 때 서로 상호작용 하지 않고 독립된 기능을 만들라는 뜻입니다.
한 기능을 수정하려 할 때 다른 클래스의 여러 부분이 영향을 받고, 이를 개발자가 확신할 수 없다면 설계부터 직교성이 고려되지 않은 것입니다.
객체 지향 언어에는 각 클래스 간의 결합도를 해칠 기능이 많이 존재합니다. 대표적으로 다중 상속이 있습니다. 하나의 인터페이스를 정의하고 여러 클래스로 상속을 시키는데 인터페이스에 변경 사항이 발생하면 하위의 상속된 클래스 모두 변경사항에 대해 수정을 가해야 합니다. 이것이 직교성이 흐트러지게 되고 서로 영향을 주고받게 되는 것입니다.
그래서 클래스가 해당 기능과 요점에 잘 설계되지 않으면 올바르지 않은 인터페이스라고 볼 수 있습니다.
함수형 언어의 특징은 반복되지 않고 독립된 함수들의 조합으로 프로그램이 구성되도록 유도됩니다. 하지만 각 함수를 통해 전달되는 매개변수의 타입이 하나라도 변경된다면 모든 함수의 매개변수가 변경되어야 할 것입니다. 함수가 반환하는 데이터 타입을 바꾸는 바람에 그 이후의 연결되는 활동에 모두 변경사항이 생기는 것입니다.
그래서 유동적인 타입 체계를 갖춘 언어를 사용하면 이런 문제를 어느 정도 예방할 수 있지만 타입에 대해 명시적으로 확인을 잘 할 수가 없어 유지보수가 까다롭다는 단점이 있게 됩니다.
그러므로 각 언어들의 직교성에 대한 차이는 객 체 지향이나 함수형 언어 자체에 내재된 것으로 볼 수가 있습니다. 개발자는 각 언어마다 특징이 다를지라도, 특정 코드의 수정이 다른 코드까지 영향을 주지 않고 직교성 유지하도록 노력해야 할 것입니다.