객체지향 언어 중에서 자바나 C++은 클래스를 먼저 정의하고 그로부터 객체를 만드는 클래스 기반 방식을 쓴다. 반면 자바스크립트는 프로토타입이라는 객체를 복사하거나 확장하여 상속을 구현하는 프로토타입 기반 방식을 쓴다. 즉 객체가 다른 객체를 참조하며 기능을 물려받는 구조다. 최근 문법에서 class 키워드가 도입되었지만 이는 프로토타입 상속을 쉽게 쓰는 문법적 설탕일 뿐, 내부 구조는 프로토타입 기반이다.
Java에서 클래스나 멤버 변수의 접근 범위를 정하는 접근제한자는 public, protected, default, private 네 가지다. public은 모든 곳에서 접근할 수 있고, protected는 같은 패키지 또는 하위 클래스에서 접근할 수 있으며, default는 접근제한자를 생략했을 때로 같은 패키지 내에서만 접근할 수 있고, private은 같은 클래스 내에서만 접근할 수 있다.
주의할 키워드가 두 가지 있다. internal은 C# 등에서 쓰는 접근제어자 이름으로 Java에는 존재하지 않는다. 그리고 package는 Java의 키워드이지만 접근 범위를 제한하는 접근제한자가 아니라 패키지 선언을 위한 문장, 즉 모듈을 묶는 역할을 한다.
예제
회원 정보를 다루는 클래스를 만든다고 하자. 회원의 이름은 public으로 열어 두고, 비밀번호는 private으로 같은 클래스 안에서만 접근하게 하면, 외부 코드가 비밀번호를 마음대로 바꾸지 못하게 된다. 같은 패키지의 다른 클래스와 공유하는 필드는 default로 두거나 하위 클래스까지 열어 주려면 protected를 쓴다.
자바스크립트에서는 객체 리터럴로 만든 객체를 다른 객체의 프로토타입으로 연결해 기능을 물려받는다. 자바처럼 클래스를 설계도로 삼지 않고, 이미 있는 객체를 복사하고 확장하는 방식으로 상속이 이루어지는 것이 두 언어의 차이다.
대표 기출 3문항
시스템에서 모듈 사이의 결합도(Coupling)에 대한 설명으로 옳은 것은?
한 모듈 내에 있는 처리요소들 사이의 기능적인 연관 정도를 나타낸다.
결합도가 높으면 시스템 구현 및 유지보수 작업이 쉽다.
모듈간의 결합도를 약하게 하면 모듈 독립성이 향상된다.
자료결합도는 내용결합도 보다 결합도가 높다.
정답과 해설 보기
정답 ③ · 소프트웨어 설계에서 모듈 간 상호 의존성을 나타내는 결합도(Coupling)의 특징을 묻는 문제이다. 모듈 간 결합도가 약할수록 모듈 간의 상호 의존성이 줄어들어 각 모듈의 독립성이 향상되며, 변경 시 다른 모듈에 미치는 영향이 적어져 유지보수가 용이해진다.
모듈 간 결합도는 낮을수록, 응집도는 높을수록 좋은 설계이다.
응집도가 가장 낮은 것은?
기능적 응집도
시간적 응집도
절차적 응집도
우연적 응집도
정답과 해설 보기
정답 ④ · 소프트웨어 모듈의 독립성을 나타내는 척도인 응집도(Cohesion)의 단계를 묻는 문제이다. 응집도는 모듈 내부의 구성 요소들이 서로 관련되어 있는 정도를 의미하며, 우연적 응집도는 모듈 내부 요소들이 아무런 관련성 없이 우연히 모여 있는 가장 낮은 수준의 응집도이다.
응집도는 모듈 내부 요소들의 관련성을 나타내며, 우연적 응집도가 가장 낮고 기능적 응집도가 가장 높다.
효과적인 모듈 설계를 위한 유의사항으로 거리가 먼 것은?
모듈간의 결합도를 약하게 하면 모듈 독립성이 향상된다.
복잡도와 중복성을 줄이고 일관성을 유지시킨다.
모듈의 기능은 예측이 가능해야 하며 지나치게 제한적 이여야 한다.
유지보수가 용이해야 한다.
정답과 해설 보기
정답 ③ · 소프트웨어 공학에서 모듈의 독립성과 품질을 극대화하기 위한 올바른 설계 원칙을 묻고 있다. 효과적인 모듈 설계를 위해서는 모듈 간의 결합도를 낮추고 모듈 내부의 응집도를 높여 독립성을 확보해야 하며, 복잡도와 중복을 줄여 일관성을 유지해야 한다.
모듈은 독립성과 재사용성을 위해 기능이 명확하고 확장 가능해야 하며, 지나치게 제한적이면 안 된다.