에너지 관점 스터디:에관스

컴활 1급 · 컴활 1급 실전 판단

컴활 1급 DefaultValue OldValue NewValue 차이: NewValue 오개념 바로잡기

두음 암기는 `디새·올전·밸현·뉴데입`입니다. DefaultValue는 새 레코드, OldValue는 변경 전, Value는 현재 값, NewData는 NotInList의 새 입력 문자열입니다.

재미있게는 `디폴트는 새집, 올드는 전집, 밸류는 현집, 뉴데이터는 새 손님`이라고 기억하세요. 여기서 가장 중요한 교정은 Access 일반 컨트롤의 현재 값을 `NewValue` 속성으로 읽지 않는다는 점입니다.

정확한 이름은 `Value`입니다. 목록에 없는 새 텍스트를 처리하는 NotInList 이벤트도 `NewValue`가 아니라 `NewData` 인수를 전달합니다. 검색어 표현보다 실제 속성명과 이벤트 시그니처를 기준으로 문제를 풀어야 합니다.

컴활 1급 Access의 DefaultValue OldValue Value NewData 차이와 NewValue 오개념을 네 개 카드로 정리한 인포그래픽
DefaultValue·OldValue·Value·NewData의 역할을 구분하고 NewValue 오개념을 바로잡는 시험 직전 요약입니다.
작성에관스 컴활 1급 학습팀 발행2026년 8월 18일 수정2026년 8월 22일 주제컴활 1급 실전 판단

핵심 포인트

이 글에서 먼저 챙길 것

  • DefaultValue는 새 레코드에 자동 입력될 기본값이며 기존 레코드는 바꾸지 않습니다.
  • OldValue는 바운드 컨트롤의 편집 전 값을 반환하는 읽기 전용 속성입니다.
  • Value는 컨트롤의 기본 속성이며 현재 또는 저장된 값을 읽고 설정합니다.
  • Access 일반 컨트롤에 현재 값을 뜻하는 표준 NewValue 속성은 없습니다.
  • NotInList 이벤트가 전달하는 새 입력 문자열의 인수명은 NewData입니다.
  • Undo는 저장 전 변경을 되돌리며 컨트롤 Undo와 폼 Undo의 범위가 다릅니다.

본문

컴활 1급 공부 기준을 더 구체적으로 보기

10초 정답: NewValue부터 바로잡습니다

새 레코드의 초기값은 `DefaultValue`, 편집 전 원래 값은 `OldValue`, 컨트롤의 현재 값은 `Value`입니다. 이 세 속성을 시간 순서로 놓으면 기본값, 이전 값, 현재 값이 됩니다.

`NewValue`는 Access 일반 텍스트 상자나 콤보 상자의 현재 값을 읽는 표준 속성명이 아닙니다. 예제 코드에 `curNewValue` 같은 이름이 보여도 개발자가 만든 변수 이름일 수 있으므로 속성과 혼동하면 안 됩니다.

NotInList 이벤트에서 목록에 없는 사용자의 새 입력 문자열을 받는 이름은 `NewData`입니다. 따라서 `NewValue는 NotInList에서 전달된다`라는 설명도 정확하지 않습니다.

두음 암기: 디새·올전·밸현·뉴데입

`디새`는 DefaultValue가 새 레코드의 기본값, `올전`은 OldValue가 변경 전 값이라는 뜻입니다. `밸현`은 Value가 현재 값, `뉴데입`은 NewData가 NotInList의 새 입력 문자열이라는 뜻입니다.

암기 문장 `디폴트는 새집, 올드는 전집, 밸류는 현집, 뉴데이터는 새 손님`을 말한 뒤 실제 영문 이름까지 복원하세요. NewValue라는 잘못된 이름이 끼어들 자리를 없애는 것이 목적입니다.

시험 직전에는 `DefaultValue → OldValue → Value → NewData`를 쓰고 옆에 `새 레코드 → 변경 전 → 현재 → 목록 밖 입력`만 붙이면 됩니다.

네 이름을 같은 표에서 비교합니다

DefaultValue는 속성이며 새 레코드에 들어갈 기본값을 정합니다. OldValue는 바운드 컨트롤의 읽기 전용 속성이며 편집 전 값을 보여 줍니다.

Value는 컨트롤의 기본 읽기·쓰기 속성으로 현재 값을 다룹니다. NewData는 속성이 아니라 ComboBox.NotInList 이벤트 프로시저가 받는 문자열 인수입니다.

문제에서 먼저 `속성인가 이벤트 인수인가`를 확인하세요. 이 한 단계만 넣어도 NewData를 Value와 같은 속성으로 보는 오답을 제거할 수 있습니다.

DefaultValue: 새 레코드의 출발값

DefaultValue는 새 레코드가 생성될 때 컨트롤에 자동으로 들어갈 값을 지정합니다. 예를 들어 주문일 컨트롤의 기본값을 오늘 날짜로 설정하면 새 주문을 시작할 때 날짜가 채워집니다.

핵심 단서는 `새 레코드`, `자동 입력`, `기본값`입니다. 사용자가 편집 중인 기존 레코드의 현재 값을 읽는 속성이 아닙니다.

Microsoft 문서도 DefaultValue가 새 레코드를 추가할 때 적용된다고 설명합니다. `기존 모든 레코드 값도 DefaultValue 변경과 동시에 바뀐다`는 선지는 틀립니다.

DefaultValue는 기존 레코드를 갱신하지 않습니다

DefaultValue를 바꾸면 그 이후 새로 추가하는 레코드의 시작값이 달라집니다. 이미 저장된 레코드의 필드 값을 일괄 수정하는 업데이트 쿼리와는 역할이 다릅니다.

시험에서는 `기본값 속성을 변경하면 기존 레코드도 자동 변경된다`는 표현이 함정으로 나올 수 있습니다. `새 레코드에만 적용`이라는 범위를 먼저 확인하세요.

기존 데이터를 바꾸려면 실제 필드 값을 수정하거나 업데이트 쿼리 같은 별도 작업이 필요합니다. 기본값 설정과 데이터 갱신을 같은 기능으로 보면 안 됩니다.

폼 컨트롤 기본값의 우선순위를 확인합니다

바운드 폼 컨트롤에 DefaultValue를 지정하면 새 레코드 입력 시 그 컨트롤의 기본값이 사용됩니다. Microsoft 문서에서는 컨트롤의 DefaultValue가 바인딩된 테이블 필드의 기본값보다 우선한다고 설명합니다.

테이블에는 기본값 A, 폼 컨트롤에는 기본값 B가 설정된 상황이라면 폼에서 새 레코드를 추가할 때 컨트롤 설정을 먼저 확인합니다.

다만 기본값은 사용자가 값을 입력하기 전의 출발값입니다. 사용자가 다른 값을 입력하면 현재 Value가 바뀌고 저장 데이터도 입력한 값에 따라 결정됩니다.

OldValue: 바운드 컨트롤의 변경 전 값

OldValue는 바운드 컨트롤의 편집 전 값을 반환하는 읽기 전용 속성입니다. 사용자가 값을 바꾼 뒤 저장되기 전이라면 OldValue와 현재 Value를 비교해 변경 여부를 판단할 수 있습니다.

예를 들어 `If Me!UnitPrice.Value <> Me!UnitPrice.OldValue Then`처럼 현재 값과 이전 값을 비교합니다. OldValue에 새 값을 대입하는 방식은 사용할 수 없습니다.

언바운드 컨트롤에는 저장된 원래 레코드 값이라는 기준이 없으므로 OldValue의 핵심 조건은 `바운드 컨트롤`과 `읽기 전용`입니다.

OldValue가 유지되는 시점을 확인합니다

사용자가 컨트롤 값을 편집하는 동안 OldValue는 변경 전 값을 유지합니다. 이 시점에는 Value와 OldValue를 비교해 값이 바뀌었는지 검사할 수 있습니다.

레코드를 저장하거나 다른 레코드로 이동하면 편집한 값이 새 저장값이 되고 OldValue도 그 값에 맞춰 갱신됩니다. OldValue가 모든 과거 이력을 영구 보관하는 별도 필드는 아닙니다.

변경 전후 비교는 저장되기 전 이벤트에서 하는 것이 자연스럽습니다. 장기 변경 이력이 필요하면 별도의 감사 테이블이나 기록 로직이 필요합니다.

Value와 Text의 차이도 함께 봅니다

Value는 컨트롤의 기본 속성이며 값을 읽거나 설정할 때 사용합니다. 명시적으로 `.Value`를 쓰지 않아도 기본 속성으로 평가되는 경우가 있지만 시험에서는 이름을 적어 역할을 분명히 하는 편이 좋습니다.

Text 속성은 컨트롤이 포커스를 가진 동안 화면에 현재 입력된 문자열을 나타냅니다. 편집 중에는 Text와 Value가 다를 수 있고 Text를 사용할 때는 포커스 조건도 확인해야 합니다.

현재 값이라는 단서가 보이면 NewValue를 만들지 말고 Value를 선택합니다. `입력 중 화면 텍스트`를 특별히 묻는 경우에만 Text의 조건을 검토하세요.

NewValue는 일반 컨트롤 속성이 아닙니다

Access VBA 예제에는 `NewValue`, `curNewValue`처럼 보이는 식별자가 등장할 수 있습니다. 하지만 프로그래머가 선언한 변수 이름과 Access 개체가 제공하는 속성명은 구분해야 합니다.

텍스트 상자나 콤보 상자의 현재 값을 읽을 때는 Value를 사용합니다. Microsoft Access의 TextBox.Value 문서도 Value를 기본 읽기·쓰기 속성으로 설명합니다.

검색어에 `DefaultValue OldValue NewValue 차이`가 포함되어도 잘못된 세트로 암기하지 마세요. 시험에서는 실제 개체·속성·이벤트 인수 이름이 맞는지까지 판별해야 합니다.

NotInList의 새 입력 문자열은 NewData입니다

콤보 상자의 LimitToList가 Yes이고 사용자가 목록에 없는 값을 입력하면 NotInList 이벤트가 발생할 수 있습니다. 이벤트 프로시저의 대표 시그니처는 `NotInList(NewData, Response)`입니다.

NewData는 목록에 없는 사용자의 입력 문자열을 담습니다. Response에는 오류 메시지를 표시할지, 값을 추가한 것으로 처리할지 같은 응답 상수를 설정합니다.

따라서 `목록에 없는 새 입력값`이라는 설명을 보고 NewValue를 고르면 안 됩니다. 속성인지 이벤트 인수인지 확인한 뒤 NewData를 선택하세요.

Undo는 호출 대상에 따라 범위가 다릅니다

Undo 메서드는 저장되기 전 변경을 되돌립니다. 특정 컨트롤에 `Me!UnitPrice.Undo`를 적용하면 그 컨트롤의 변경을 취소합니다.

폼에 `Me.Undo`를 적용하면 현재 레코드에서 편집한 여러 컨트롤의 변경을 함께 취소할 수 있습니다. 시험에서는 메서드 호출 대상이 컨트롤인지 폼인지 확인해야 합니다.

이미 레코드가 저장된 뒤에는 같은 방식으로 이전 상태를 되살리는 단순 취소가 아닙니다. Undo 문제도 `저장 전`이라는 시점을 먼저 표시하세요.

BeforeUpdate에서 변경 검사를 적용합니다

BeforeUpdate는 변경 내용이 저장되기 전에 유효성을 검사하거나 저장을 취소하기 좋은 시점입니다. 이때 Value와 OldValue를 비교하면 실제 변경 여부를 확인할 수 있습니다.

가격이 바뀌었을 때 확인 메시지를 띄우고 사용자가 취소하면 `Cancel = True`로 업데이트를 막은 뒤 컨트롤 Undo를 적용할 수 있습니다. 핵심은 저장 전에 검사한다는 점입니다.

OldValue를 새 값으로 대입해 복원하려 하기보다 Undo의 대상을 선택하는 편이 개체 모델에 맞습니다. OldValue는 읽기 전용이라는 조건을 함께 기억하세요.

값의 흐름을 시간 순서로 봅니다

1단계. 새 레코드를 시작하면 DefaultValue가 출발값을 제공합니다. 2단계. 사용자가 값을 편집하면 Value 또는 포커스 중 Text에 새 입력이 나타납니다.

3단계. 저장 전에는 OldValue가 편집 전 값을 유지하므로 Value와 비교할 수 있습니다. 4단계. 저장하면 편집한 Value가 레코드 값이 되고 OldValue도 이후 그 값에 맞춰집니다.

NotInList의 NewData는 이 일반 시간축의 속성이 아닙니다. 콤보 상자 목록 밖 입력이라는 특정 이벤트 상황에서만 등장하는 인수로 따로 놓으세요.

함정 선지를 고치고 셀프 체크합니다

`DefaultValue를 바꾸면 기존 레코드가 모두 변경된다`는 틀립니다. `OldValue는 수정 가능한 속성이다`도 틀립니다. 새 레코드 적용과 읽기 전용 조건을 각각 확인하세요.

`현재 컨트롤 값은 NewValue로 읽는다`는 틀리고 Value입니다. `NotInList의 새 입력 인수는 NewValue다`도 틀리고 NewData입니다.

질문 1. 새 레코드 기본값은? DefaultValue. 질문 2. 변경 전 읽기 전용 값은? OldValue. 질문 3. 현재 값은? Value. 질문 4. NotInList 입력은? NewData.

시험 직전에는 다섯 줄만 봅니다

1. DefaultValue: 새 레코드에 자동 입력될 기본값, 기존 레코드는 변경하지 않음.

2. OldValue: 바운드 컨트롤의 변경 전 값, 읽기 전용, 저장 뒤 현재 값에 맞춰짐.

3. Value: 컨트롤의 현재 또는 저장된 값을 읽고 설정하는 기본 속성.

4. NewData: ComboBox.NotInList가 받는 목록 밖 새 입력 문자열 인수.

5. NewValue로 외우지 말고 `디새·올전·밸현·뉴데입`을 복원할 것.

Microsoft 공식 문서로 재확인했습니다

본문은 Microsoft Learn의 DefaultValue, TextBox.Value, TextBox.OldValue, ComboBox.NotInList, Control.Undo 문서를 2026년 8월 18일 기준으로 대조했습니다.

DefaultValue의 새 레코드 적용 범위, OldValue의 읽기 전용·바운드 조건, Value와 Text 차이, NotInList의 NewData 인수, Undo 대상 범위를 확인했습니다.

Access 버전이나 화면 언어에 따라 메뉴 이름은 달라질 수 있지만 VBA 개체 모델의 속성·이벤트 인수 이름은 공식 문서를 우선 기준으로 삼습니다.

FAQ

자주 묻는 질문

Access에 NewValue 속성이 있나요?

일반 텍스트 상자나 콤보 상자의 현재 값을 뜻하는 표준 NewValue 속성으로 외우면 안 됩니다. 현재 값은 Value로 읽고 설정하며 코드의 NewValue는 사용자 변수인지 확인해야 합니다.

DefaultValue와 OldValue의 가장 큰 차이는 무엇인가요?

DefaultValue는 새 레코드에 들어갈 출발값을 정하는 읽기·쓰기 속성이고, OldValue는 바운드 컨트롤의 편집 전 값을 보여 주는 읽기 전용 속성입니다.

NotInList 이벤트의 새 입력값은 무엇으로 받나요?

ComboBox.NotInList 이벤트는 목록에 없는 사용자의 입력 문자열을 NewData 인수로 전달합니다. NewValue가 아니라 NewData입니다.

Value와 OldValue는 언제 비교하나요?

레코드가 저장되기 전, 예를 들어 BeforeUpdate에서 현재 Value와 편집 전 OldValue를 비교하면 변경 여부를 확인할 수 있습니다. 저장 뒤에는 OldValue도 새 저장값에 맞춰집니다.