프로그래밍에서 "컨텍스트"라는 용어? [닫은]


161

나는 몇 달 동안 프로그래밍을 해왔으며 자주 사용되는 단어는 수업에서 "문맥"입니다. 마찬가지로 ServletContext(자바), Activity(안드로이드), Service(자바, 안드로이드), NSManagedContext(목표 - C, 아이폰 OS).

사전을 살펴보면 상황, 환경, 상황 등이라는 단어의 의미를 알 수 있습니다. 그러나 저는 영어를 모국어로 사용하지 않기 때문에 직접 번역해야 할 내용을 이해하지 못합니다. 예를 들어, 명명 된 클래스 SomeClassContext또는 컨텍스트 매개 변수가있는 메서드를 작성 해야하는 경우 이해하지 못하므로 컨텍스트 이름을 지정 해야하는 시점을 이해할 수 없습니다.

Stack Overflow에서 컨텍스트를 검색했지만 질문 / 답변이 도움이되지 않았습니다.

누군가가 설명을 해줄 수 있다면 매우 기쁠 것입니다.


6
컨텍스트는이 객체가 작동하는 영역을 말합니다.
Blundell

7
문맥은 특정 시점의 물체 또는 시스템의 상태입니다
Matt

답변:


190

치과 의사에게 가서 치아를 뽑아 놓았다고 가정 해 봅시다.

접수 원이 귀하의 이름을 물으면 약속을 시작하는 데 필요한 정보입니다. 이 예에서 귀하의 이름은 상황 정보 입니다. 그래서에서 상황에 맞는 치과 의사를 방문, 당신은 당신의 치아를 뽑아 얻을 당신의 이름을 제공해야합니다.

이제 은행으로 걸어 가자고합시다.

은행에서는 $ 100을 인출하도록 요청합니다. 텔러는 돈을주기 전에 신원을 확인해야하므로 운전 면허증을 보여 주거나 ATM 카드를 스 와이프하고 PIN 번호를 입력해야합니다. 어느 쪽이든, 당신이 제공하는 것은 context 입니다. 텔러는이 정보를 사용하여 거래를 진행시킵니다. 그러면 어떤 계정에서 탈퇴 할 것인지 묻습니다. "저축 예금 계좌"라고 대답하면 훨씬 더 문맥 입니다.

더 많은 맥락을 제공할수록 상대방이 귀하의 요청을 처리하는 데 도움이되는 지식이 많아집니다. 경우에 따라 문맥은 선택 사항이며 (더 나은 결과를 얻기 위해 Google 검색에 더 많은 단어를 입력하는 것과 같이) 때로는 ATM에서 PIN 번호를 제공하는 것과 같이 필요할 수도 있습니다. 어느 쪽이든, 그것은 일반적으로 일을하는 데 도움이되는 정보입니다.

이제 당신이 $ 100를 가지고 입이 치유되는 동안 따뜻한 곳으로 비행기 티켓을 구입한다고 가정 해 봅시다.

당신은 좋은 햇볕이 잘 드는 목적지에 도착하지만, 가방은 그것을 만들지 않습니다. 공항 시스템 어딘가에서 길을 잃었습니다. 따라서 "수하물 청구 표"(바코드가 붙어있는 스티커)를 "잃어버린 수하물 사무소"로 가져 가십시오. 책상 뒤에있는 사람이 가장 먼저 요구하는 것은 수하물 번호가 적힌 티켓입니다. 이것이 필요한 컨텍스트 의 예입니다 .

그러나 수하물 사람은 자세한 내용을 요청 가방에 대한 더 쉽게 찾을 수 있도록있다. 그들은 " 무슨 색입니까? 어떤 크기입니까? 바퀴가 있습니까? 단단하거나 부드럽습니까? "그런 정보가 반드시 필요한 것은 아니지만, 정보를 제공하면 사물을 좁히는 데 도움이됩니다. 문제 영역 : 검색 속도가 훨씬 빨라집니다 ( 선택적 문맥) .

흥미로운 부분은 다음과 같습니다. 많은 소프트웨어 및 API의 경우 필수 컨텍스트는 일반적으로 메소드 서명의 실제 매개 변수로 끝나고 선택적 컨텍스트 는 무엇이든 포함 할 수있는 유연한 키-값 맵과 같이 다른 곳으로갑니다 (비어있을 수 있음) ) 또는 필요한 경우 액세스 할 수있는 스레드 로컬 스토리지에 저장하십시오.

위의 예는 실생활에서 얻은 것이지만 컴퓨터 과학 영역에 쉽게 매핑 할 수 있습니다. 예를 들어 HTTP 헤더에는 컨텍스트 정보가 포함됩니다. 각 헤더 는 요청중인 정보 관한 것 입니다. 또는 2 단계 커밋 프로세스의 일부로 글로벌 트랜잭션 ID를 전송할 때 해당 트랜잭션 ID는 컨텍스트입니다. 트랜잭션 관리자 현재 진행중인 전체 작업에 대한 정보이므로 작업을 조정하는 데 도움이됩니다 .

희망이 도움이됩니다.


22
@ 브라이언 : 귀하의 게시물과 여기에 주어진 다른 답변에서 나는 그것을 이해하기 시작할 것이라고 생각합니다. 이벤트에 대한 상태 정보를 전달하는 객체는 "컨텍스트"객체입니까? 맞습니까? 따라서 RequestContext 객체는 특정 요청에 대한 정보를 전달합니다. 맞습니까? 또 다른 요청이 들어 오면 RequestContext 객체에 첨부 된 정보가 변경됩니다. 컨텍스트 객체가 DTO (데이터 전송 객체)와 비슷하다고 말하는 것이 잘못입니까? 그러나 컨텍스트는 다른 관련 "사물"에 대한 정보를 전달하는 반면 DTO는 사람과 같은 개체에 대한 정보를 전달합니까? 감사합니다
user772058

9
당신은 그것을 못 박았습니다, 정확히 맞습니다. RequestContext는 실제로 진행중인 요청에 대한 정보를 전달합니다 (예 : 클라이언트의 로케일). 컨텍스트는 DTO / VO와 유사하지만 일반적으로 강력하게 형식화되지는 않습니다. 그러나 개념은 괜찮습니다.
Brian Kelly

5
@Brian : 상황에 맞는 메뉴에 관해 이야기 할 때,이 답변에서 배운 문맥의 의미가 내 머리에 맞지 않다는 또 다른 질문이 떠 올랐습니다. 내가 지금 이해하는 바와 같이 문맥은 무언가에 대한 운반 상태에 대한 (짧음)입니다. 이런 식으로 "문맥"이라는 단어를 사용할 때 무엇을 의미합니까?
user772058

9
좋은 질문. "컨텍스트 메뉴"에서 "컨텍스트"의 의미는 "메뉴에 표시되는 내용은 클릭 한 위치, 클릭 한 시간 및 응용 프로그램에서 발생하는 다른 작업에 따라 다릅니다"입니다. 이러한 정보 (위치 / 시간 / 클릭 한 내용)는 컨텍스트를 나타내며 메뉴에서 제공 할 내용을 결정할 수 있도록 GUI 코드로 전송됩니다.
Brian Kelly

2
따라서 메소드의 매개 변수는 컨텍스트입니다. 내가 잘못?
Can Aydoğan

14

컨텍스트는 정보를 전달하는 버킷으로 볼 수 있습니다. 일반적으로 메소드 호출에 직접 연결될 필요는 없지만 여전히 관련이있는 것을 전달하는 데 사용됩니다. 그것을 설명하는 평범한 방법은 "당신이 관심을 가질만한 것들"일 수 있습니다.

예를 들어 DB의 값을 업데이트하는 서비스를 작성하는 경우 레코드 ID와 새 값을 전달할 수 있습니다.

일반 인터페이스를 원하는 경우 서비스가 임의의 비즈니스 로직을 수행 할 수 있도록 전달할 컨텍스트를 정의 할 수도 있습니다. 따라서 서비스가 이러한 값에 따라 추가 논리를 수행 할 수 있으므로 컨텍스트에 사용자 인증, 사용자 세션 상태 등을 포함시킬 수 있습니다.


7
그것에 대해 생각하는 또 다른 유용한 방법은 "어떤 일이 일어나고 있는지에 대한 정보"입니다. 또는 더 학문적으로 "메타 정보"입니다. 그것은 꽤 학문적이지만 정확합니다. 이 맥락에서.
브라이언 켈리

4
기본적으로 특정 시점의 상태, 그보다 더 복잡하지 않음
Matt

13

이 스레드는 시작된 지 몇 년이 지난 2015 년입니다.

그럼에도 불구하고, 나는 "컨텍스트"를 이해하는 데 어려움을 겪고있는 나와 같은 누군가를 돕기 위해이 메시지를 게시하고 있습니다.

결코 Java 프로그램에서 Context를 사용했다고 주장하지 않으므로 하드 코딩으로 컨텍스트를 작성하는 것은 전적으로 귀하에게 달려 있습니다.

"개념적으로 문맥"은 "더 많은 정보"와 같습니다. 클라이언트가 서버에 요청을 할 때-요청을 수행하기 위해 서버가 "정보를 제공해 줄 수 있도록 더 많은 정보를 제공합니다"라고 말합니다. 따라서 요청과 함께 클라이언트는 세부 사항 번들을 제공합니다. 서버는 요청을 처리하는 데 필요한 모든 정보를 번들에서 선택하여 선택합니다. 이 번들은 "컨텍스트"입니다.

예 :

환자가 의사에게 가서 treat_me라고 말합니다 ( "두통이 있습니다") 의사 사무실은 환자에게 채울 양식을 제공합니다. 환자는 양식을 채 웁니다. 이 양식은 "treat_me"요청을 수행하기 위해 의사가 사용합니다.

요청이 다음과 같이 보입니다.

treat_me ( "i have a headache", filled_form_num_23321 ) 

filled_form_num_23321 모습 은 다음과 같습니다 .

Q. 상태로 이끄는 것은 무엇입니까? A. 깔끔한 스카치의 마지막 못 10 개 못
Q. 환자 이름? A. Joe Bigdrinker
Q.Age? 98

이 거래 filled_form_num_23321에서 "문맥"입니다.

이것이 "컨텍스트"의 개념을 명확히하는 데 도움이되기를 바랍니다.


7

나는 항상 컨텍스트를 내가 작업하고있는 객체 나 구조와 관련된 특정 상태로 생각합니다.

예를 들어, 뷰에서 drawRect를 사용하는 경우 (뷰에 대해 모든 드로잉을 수행해야하는 경우) 항상 핵심 그래픽 명령문을 실행할 currentGraphicsContext를 가져와야합니다. 이 컨텍스트에는 뷰의 경계, 획 색상, 선을 그리기위한 획 두께, 닫힌 패스를 채우기위한 채우기 색상 등이 포함됩니다.이 컨텍스트 (대부분의 다른 것들과 마찬가지로)는이 시점의 현재 상태입니다. 이 경우 그래픽 컨텍스트를 다음과 같은 상태 집합으로 생각하십시오.

획이 1.5 픽셀로 채워짐 채움 색상이 검은 색으로 표시됨

기본적으로 현재 시점의 상태 ...


5

실제적인 예를 제공합니다. 사용자 (로그온 한) 및 브라우저 언어에 따라 일부 정보를 가져 오거나 렌더링 할 수있는 특정 웹 페이지가 있다고 가정합니다. 정보를 가져 오는 논리는 사용자 및 언어와 독립적입니다. 귀하의 페이지에는 사용자와 언어가 제공됩니다. 귀 하나 영어 또는 스페인어인지 상관없는 논리에 대한 언어입니다.

일부 의사 코드 :

class FooPage
{
    void handleRequest(RequestContext context)
    {
        User user = context.getUser();
        Locale locale = context.getLocale();

        … do some logic based on the context
    }
}

그렇게 어렵지는 않지만 개념을 이해하는 데 시간이 걸립니다.


5

컨텍스트실행을 나타냅니다 컨텍스트를 나타내며, 이는 코드의 특정 지점에서 도달 할 수있는 심볼과 해당 특정 실행에서 해당 심볼의 값입니다.

컨텍스트는 다음과 같은 이유로 중요한 개념입니다.

  1. 실행 가능한 단위 (기능, 절차, 명령)는 다른 결과를 생성하거나 다른 상황에서 다르게 동작 할 수 있습니다.
  2. 문맥이 더 크거나 복잡할수록 코드의 기능을 이해하기가 더 어려워집니다.

컨텍스트 클래스 를 작성 하거나 컨텍스트 매개 변수를 전달할 필요가 없습니다 . 함수 / 메소드에 전달 된 모든 매개 변수는 호출 될 때 실행 컨텍스트의 일부가됩니다.

영어를 사용하는 사람은 아니지만 상황 , 모듈성 , 커플 링 , 응집력 등과 같은 개념을 부드럽고 철저하게 소개하기 위해 Code Complete 를 복사하는 것이 좋습니다 .


제 2 판이 있습니다. 저도 그것을 읽을 수 있습니까?
user772058

나는 서점에서 두 번째 판을 탐색하고 원본을 고수하기로 결정했습니다. 이유가 기억 나지 않습니다.
Apalala

2

귀하의 경우 컨텍스트는 응용 프로그램이 실행되는 환경입니다.

제대로 실행하기 위해 응용 프로그램에 필요한 정보 / 서비스 / 기능을 제공합니다.

HTH


0

저자는 종종 "문맥"이라는 단어가 사용되는 문맥을 독자가 이해하고 있다고 가정합니다.

다음 문장에서 컨텍스트를 정의하는 방법 "? 런타임은 가능한 주입 값을 저장할 수있는 컨텍스트를 작성합니다.이 컨텍스트는 애플리케이션과 프레임 워크가 컨텍스트에 요소를 추가하는 등의 컨텍스트를 수정할 수 있습니다.

저자는 컨텍스트를 사용하여 무언가의 컨텍스트를 보유하는 일종의 컨테이너, 아마도 힙을 의미하는 것으로 보입니다. 많은 의미와 혼동을 일으키는 단어가되었습니다. 컨텍스트이고 컨텍스트에 저장되는 요소입니까? 컨텍스트라는 단어가 사용되는 컨텍스트의 혼동을 줄이기 위해 "런타임은 컨텍스트를 요소 형식으로 저장하는 컨테이너를 작성합니다."라고 말할 수 있습니다. "런타임은 상태를 요소의 형태로 저장하기위한 컨테이너를 생성하며이 컨테이너의 상태를 CONTEXT라고합니다."


0

3 년 후 조금 늦었지만이 스레드가 도움이 될 것입니다. "컨텍스트"라는 단어는 프로그래밍에서 기술적 인 의미를 갖습니다 (일반 영어 의미가 아님).

어떤 프로그래밍 언어에 컨텍스트가 없습니까?

예제로 사용할 수 있는지 확실하지 않고 일부 정보를 가져옵니다. 나도 기술적 인 프로그래밍 용어 "컨텍스트"에 대해 언어에 구애받지 않는 설명을 듣고 싶습니다.

편집 : 또는 적어도 "컨텍스트"라는 용어는 기술적 인 프로그래밍 컨텍스트에 적용 할 수 있음을 보여줍니다 (punn 의도는 없음). 이 용어를 하나 이상의 구체적으로 적용 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.