ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 모듈
    프로그래밍언어론 2023. 4. 10. 05:10

    모듈

    큰 규모의 소프트웨어를 만들 때 가장 어려운 것은 프로그래머들이 각자 일을 독립적으로 진행
    할 수 있도록 어떻게 일을 나누어 할 것인가이다.
    이러한 노력의 모듈화는 정보 은닉이라는 개념에 직접 관련되는데,
    필요로 하지 않는 시스템의 부분에서는 객체나 알고리즘이 가능한 한 보이지 않게 하는 것이다.

    정보은닉은 모듈간에 상호 영향을 최소화 하고(프로프래머의 독립적인 작업 가능),
    시스템의 어느 부분을 이해하는데 필요한 정보의 양을 최소화 한다.

    정보 은닉은 개발적 측면에서는 더 적은 이름이 노출되게 되므로 이름 충돌의 가능성이 줄어들고, 데이터 추상화를 더 강하게 할 수 있다.
    또한 유지보수 측면에서는 경계를 좁혀서 오류지점을 찾는데 도움이 된다.

    모듈은 여러 함수와 클래스를 묶은 단위로써 이름이 내부에서는 보이고, 외부에서는 보이지 않는다.
    또는 외부에서는 제한적인 이름만 보이도록 한다.

    모듈은 이름의 가시 범위를 정하는 캡슐화 방법이다.
    클래스와 다르게 여러 객체를 생성하지 않는다.
    즉, 객체모음(데이터, 서브루틴, 클래스)이 캡슐화가 되는것.

    언어마다 모듈단위도 다르고 캡슐화 방식도 다르다.

    캡슐화의 방법

    서브루틴의 사용…그러나

    서브루틴의 지역변수는 정보 은닉이 되지만, 객체가 서브루틴 내부에서만 살아있다.
    C의 static 지역변수는 생명주기가 유지되도록 하면서 밖에서 참조는 차단한다. 즉, 살아있지만 안보이도록 하려 한다.

    여러개의 서브루틴 사시에서만 사용되는 변수가 필요한데 이때 모듈이 필요해 진다.

    C의 파일*
    구조체로 캡슐화는 불가능하다.
    파일 내부와 외부 구분없이 객체 변수를 통해 구조체 필드에 언제나 접근이 가능하다.
    (포인터는 어디서든 보이기 때문)

    자바 클래스
    데이터와 연산을 포함한다.

    • 객체 여러개 생성
    • this 매개변수를 통해 대상 객체를 접근
    • 정적 변수는 클래스 이름으로 접근
    • 이름에 대한 접근 범위를 지정

    클래스 범위 규칙
    클래스 범위의 이름은 클래스 내부에서는 다 보인다.
    지역변수나 블록 변수는 해당 범위에서만 보인다.
    메소드 네에서 자기를 포함한 범위의 이름은 다 보인다.

    객체 범위 규칙
    클래스 외부에서는 인스턴스 객체를 통해 접근한다.
    객체의 내부 이름은 가시성 접근 권한에 의해 보이는 이름으로 결정한다.

    클래스 범위는 정적 범위이고, this가 아닌 다른 인스턴스에 대한 연산을 허용한다.

    모듈의 범위 규칙

    Exports
    C언어에서 이름을 모듈 밖으로 내보내는 방법
    (명시적은 public)

    제한적인 방법으로 변수를 read-only export를 하거나 블랙박스형태(이름 참조는 가능하나, 내부 접근 불가),
    또는 상속한 클래스에서만 가능하도록 한다.(protected)

    import

    • 닫힌 범위

    외부의 이름을 참조하려면 명시적으로 import 해야한다.
    프로그램의 다른 부분에서 참조하는 것을 명시적으로 나열한다.
    C언어에서의 파일에서 import는 전방선언과 export로 해결하는 방법이 있다.

    • 개방범위:import를 하지 않아도 되는경우

    대부분 언어에서 서브루틴은 전역을 몯 접근이 가능하다(파이썬은 불가)

    • 선택적 개방

    모듈 A에서 foo라는 이름은 import하면 A.foo로 접근 가능

    접근 가능성을 따질때는 컴파일러가 정적으로 이를 계산한다.

    728x90

    '프로그래밍언어론' 카테고리의 다른 글

    다형성 및 관련  (2) 2023.04.12
    범위내 바인딩  (0) 2023.04.12
    선언과 정의  (0) 2023.04.09
    범위규칙  (0) 2023.04.09
    객체의 생명주기  (0) 2023.03.27

    댓글

Designed by Tistory.