인프런 커뮤니티 질문&답변

꼬꼬록님의 프로필 이미지
꼬꼬록

작성한 질문수

오브젝트 - 기초편

3-1. 객체지향 설계 원칙

객체 협력, 클래스구조와 런타임, 컴파일타임의 관계

해결된 질문

작성

·

128

·

수정됨

1

안녕하세요.

 

신입으로 취업준비하면서 공부중인데 응용을 못하던 차에 너무 필요한 강의를 만난것 같습니다!

 

제가 궁금한 부분은

'객체 협력(런타임)에서 클래스 구조(컴파일타임)의 순서로 진행'

에서 런타임과 컴파일타임이 어떻게 연결되는 개념인지 입니다.

 

제가 해당 챕터에서 이 내용을 이해하기로는 아래와 같습니다.

 

  1. 변경에 용이하기 위해 과한 의존성을 피하여 파급효과를 줄여야 한다는점.

  2. 이를 위해서 통제된 문맥을 갖는것이 중요하고, 이에 따라 행동을 먼저 결정하고 상태를 결정한다는 점.

  3. 그런데 순서상 객체안의 데이터는 객체가 정의되어야 객체의 데이터도 결정되기 때문에 필연적으로 순서상 객체의 협력을 먼저 고려하여 객체를 드러낸 뒤, 클래스를 설계해야 한다는 의미로 이해했습니다.

 

단순히 런타임은 실행시점, 컴파일타임은 컴파일 시점인 것이라고 생각하고 있는데, 어떤 맥락에서 이런 표현들이 연결되는 것인지 잘 모르겠습니다.

 

사실 다른 책에서도 갑자기 '런타임 시점에', '컴파일 시점에'라는 말들이 가끔 나오는데 매번 잘 이해했다고 생각하다가 저런 말들이 갑자기 나오면 불편해졌던 기억이 납니다. ㅠ

 

제가 잘못 강의를 이해한것인지, 아니면 해당 맥락에서 반드시 이해해야 할 기본 배경지식을 놓치고 있는것은 아닌지 모르겠습니다.

답변 1

1

조영호님의 프로필 이미지
조영호
지식공유자

꼬꼬록님 안녕하세요. 🙂

강의가 도움이 된다니 정말 다행이네요.

말씀 듣고나니 컴파일타임과 런타임이라는 용어에 대해 오브젝트 책에서는 간략히나마 설명해 놓았었는데 강의에서는 충분히 설명드리지 못했다는 생각이 드네요.

오브젝트 책 257페이지의 내용을 인용하도록 하겠습니다.

의존성과 관련해서 다루어야 하는 또 다른 주제는 런타임 의존성(run-time dependency)컴파일타임 의존성(compile-time dependency)의 차이다. 먼저 여기에서 사용하는 런타임과 컴파일타임의 의미를 이해할 필요가 있다.

런타임은 간단하다. 말 그대로 애플리케이션이 실행되는 시점을 가리킨다. 컴파일타임은 약간 미묘하다. 일반적으로 컴파일타임이란 작성된 코드를 컴파일하는 시점을 가리지키지만 문맥에 따라서는 코드 그 자체를 가리키기도 한다. 컴파일 타임 의존성이 바로 이런 경우에 해당한다. 컴파일타임 의존성이라는 용어가 중요하게 생각하는 것은 시간이 아니라 우리가 작성한 코드의 구조이기 때문이다. 또한 동적 타입 언어의 경우에는 컴파일 타임이 존재하지 않기 때문에 컴파일 타임 의존성이라는 용어를 실제로 컴파일이 수행되는 시점으로 이해하면 의미가 모호해질 수 있다. 따라서 어딘가에서 컴파일타임이라는 용어를 보게된다면 그것이 정말 컴파일이 진행되는 시점을 가리키는 것인지 아니면 코드를 작성하는 시점을 가리키는 것인지를 파악하는 것이 중요하다.

객체지향 애플리케이션에서 런타임의 주인공은 객체. 따라서 런타임 의존성이 다루는 주제는 객체 사이의 의존성이다. 반면에 코드 관점에서 주인공은 클래스다. 따라서 컴파일타임 의존성이 다루는 주제는 클래스 사이의 의존성이다.

질문해 주신 '객체 협력(런타임)에서 클래스 구조(컴파일타임)의 순서로 진행'은 말 그대로 런타임의 구조를 먼저 고민한 이후에 런타임 구조에 맞는 컴파일타임 구조를 설계해야 한다는 말입니다.

객체지향에서 런타임 구성 요소는 객체이고 (클래스 기반의 객체지향 언어의 경우) 컴파일타임 구성 요소(즉, 코드의 단위)는 클래스이기 때문에 객체의 구조와 객체 사이의 협력 관계를 먼저 결정한 후에 클래스 내부와 클래스 사이의 관계를 설계해야 한다고 이해하시면 됩니다.

답변이 되었는지 모르겠네요. 🙂

꼬꼬록님의 프로필 이미지
꼬꼬록
질문자

인용해주신 내용이 방금 내용보고 작성해주신 내용이 아닐까 싶을정도네요.

컴파일타임 의존성이란 코드 그 자체를 의미한다는 지점을 이해하고나니 더이상 혼동이 없을 것 같습니다.

감사합니다!

조영호님의 프로필 이미지
조영호
지식공유자

감사합니다 꼬꼬록님 🙂
궁금한 내용 있으면 언제라도 문의 주셔요!

꼬꼬록님의 프로필 이미지
꼬꼬록

작성한 질문수

질문하기