본문 바로가기

값·변수·자료형·연산

count = 3을 보고 변수 count 자체가 숫자 3이라고 생각하기 쉽다. 그러나 count는 코드가 값을 찾기 위해 쓰는 이름이고, 3은 실제 값이며, 정수형은 어떤 값과 연산을 허용할지 정하는 규칙이다. 변수에 새 값을 대입해도 이름은 같고 값은 달라진다. 두 변수가 같은 객체를 가리키면 한쪽 변경이 다른 쪽…

상자 비유만으로는 변수를 충분히 설명할 수 없다

count = 3을 보고 변수 count 자체가 숫자 3이라고 생각하기 쉽다. 그러나 count는 코드가 값을 찾기 위해 쓰는 이름이고, 3은 실제 값이다. 정수형은 어떤 값과 연산을 허용할지 정하는 규칙이다. 그래서 변수에 새 값을 대입해도 이름은 같고 값만 달라진다. 두 변수가 같은 객체를 가리키면 한쪽에서 바꾼 내용이 다른 쪽에서 보일 수도 있다.

이름과 값, 저장 위치, 자료형을 구분해야 복사와 참조, 형변환, 예상 밖의 변경을 이해할 수 있다.

먼저 되짚기: 값은 비트로 표현되지만 비트열만으로 의미는 없다

비트열은 해석 규칙에 따라 수·문자·논리값이 되었다. 프로그램의 값도 결국 비트로 표현되지만, 자료형과 실행 문맥이 그 비트가 무엇이며 어떤 연산이 가능한지 정한다.

비트열은 프로그램 안에서 값이 된다

이름은 값을 찾고 자료형은 가능한 값과 연산을 정한다

상자 안의 대상과 화살표의 조건을 함께 읽으세요. 좁은 화면에서는 같은 관계를 세로로 재배치한 도식을 보여 줍니다.

이름은 값을 찾고 자료형은 가능한 값과 연산을 정한다비트열은 해석 규칙으로 값이 되고 변수 이름은 그 값을 찾거나 보관하도록 연결된다. 자료형은 가능한 값과 허용 연산·표현·오류를 정한다. 이 세 역할은 한 실행 순서가 아니며 변수에서 자료형이 만들어지는 관계도 아니다.bits → value: 해석name → value: 이름 연결type → value: 규칙해석이름 연결규칙비트열·해석 규칙: 내용을 값으로 읽음비트열·해석 규칙내용을 값으로 읽음실제 값: 계산·저장·전달 데이터실제 값계산·저장·전달 데이터변수 이름: 현재 값과 이름 연결변수 이름현재 값과 이름 연결자료형: 허용 값·연산·오류자료형허용 값·연산·오류
이름은 값을 찾고 자료형은 가능한 값과 연산을 정한다비트열은 해석 규칙으로 값이 되고 변수 이름은 그 값을 찾거나 보관하도록 연결된다. 자료형은 가능한 값과 허용 연산·표현·오류를 정한다. 이 세 역할은 한 실행 순서가 아니며 변수에서 자료형이 만들어지는 관계도 아니다.bits → value: 해석name → value: 이름 연결type → value: 규칙해석이름 연결규칙비트열·해석 규칙: 내용을 값으로 읽음비트열·해석규칙내용을 값으로 읽음실제 값: 계산·저장·전달 데이터실제 값계산·저장·전달데이터변수 이름: 현재 값과 이름 연결변수 이름현재 값과 이름연결자료형: 허용 값·연산·오류자료형허용값·연산·오류

비트열은 해석 규칙으로 값이 되고 변수 이름은 그 값을 찾거나 보관하도록 연결된다. 자료형은 가능한 값과 허용 연산·표현·오류를 정한다. 이 세 역할은 한 실행 순서가 아니며 변수에서 자료형이 만들어지는 관계도 아니다.

그림에서 비트열은 해석 규칙을 거쳐 실제 값이 되고, 변수 이름은 그 값과 연결되며, 자료형은 그 값에 허용되는 값과 연산, 오류를 정한다. 이 세 역할은 차례로 일어나는 실행 순서가 아니다. 즉 값과 이름, 자료형은 서로 다른 층이다.

값

값은 프로그램이 저장·전달·계산하는 실제 데이터다. 숫자 3, 문자열 서울, 논리값 참, 주문 객체가 값의 예다. 값은 그 자체의 내용과 자료형을 가지며 함수의 입력이나 결과가 될 수 있다.

변수와 자료형 전에 값을 다시 잇는다

값은 실제 데이터 내용이며 함수의 입력·결과가 될 수 있다. 변수는 이 값을 이름과 연결하고 자료형은 가능한 값과 연산을 제한한다.

같은 100도 의미가 다르다

정수값 100, 문자열 "100", 100원, 100%는 겉으로는 같은 기호처럼 보여도 자료형과 단위, 적용할 수 있는 연산 규칙이 다르다. 그래서 값의 내용과 이름, 자료형, 단위를 한 항목으로 뭉개지 않는다.

변수

변수(variable)는 값을 가리키거나 보관하도록 이름 붙인 프로그램 요소다. 언어 구현에 따라 변수는 값을 직접 담는 위치처럼 동작하거나 다른 객체를 가리키는 참조를 담을 수 있다. 대입은 변수와 값의 연결을 만들거나 바꾼다.

자료형

자료형(data type, 타입)은 가능한 값과 허용 연산, 표현과 오류의 규칙이다. 예를 들어 정수형에는 정수 범위와 덧셈이, 논리형에는 참·거짓과 논리 연산이 정의된다. 자료형 검사는 의미 없는 연산을 실행 전이나 실행 중에 거부한다.

연산은 하나 이상의 값을 받아 새 값을 만들거나 상태를 바꾸는 규칙이다. +도 숫자 덧셈과 문자열 이어 붙이기처럼 피연산자의 자료형에 따라 의미가 달라질 수 있다.

세 줄의 코드에서 일어나는 일

price: 정수 = 1200
quantity: 정수 = 3
total: 정수 = price * quantity

price, quantity, total은 변수 이름이고 1200, 3, 3600은 정수 값이다. 정수라는 자료형은 곱셈을 허용하고 표현 범위를 정한다. 마지막 줄은 두 변수에서 현재 값을 읽고 곱셈 연산으로 새 값 3600을 만든 뒤 total에 연결한다.

이것은 특정 언어의 실행 코드가 아니라 자료형과 대입을 드러낸 가상 표기다. 콜론 뒤 정수는 해당 이름에 사용할 자료형이고, = 오른쪽은 지금 계산할 값이며, *는 곱셈을 뜻한다. 첫 줄 뒤에는 price만 1200이고, 둘째 줄 뒤에는 quantity도 3이 되며, 셋째 줄 뒤에는 total도 3600이 된다. 아직 실행하지 않은 줄의 이름을 0이라고 가정하지 않는다.

그래서 이후 price = 1500을 수행해도 이미 계산된 total이 저절로 4500이 되지는 않는다. 대입은 수학식처럼 영구적인 관계를 선언하는 것이 아니라, 그 시점에 계산한 값을 저장하는 동작이기 때문이다. 총액을 따라 바꾸려면 다시 계산하거나 값 변화에 반응하는 별도 규칙이 필요하다.

VT-1: 세 줄의 대입을 상태표로 추적한다

가상 코드가 다음과 같다고 하자.

price = 100
backup = price
price = 120

정수값 대입 모형의 상태를 한 줄씩 쓰면 다음과 같다. 미정의는 아직 변수를 만들지 않았다는 뜻이고 0과 다르다.

실행 직후pricebackup읽고 쓴 것
시작미정의미정의아직 없음
price=100100미정의price에 100 저장
backup=price100100그때 price 값 100을 읽어 backup에 저장
price=120120100price 연결만 120으로 변경

따라서 backup은 price를 실시간으로 감시하는 수학식이 아니다. 세 번째 줄 다음에 backup을 120으로 만들려면 backup=price를 다시 실행해야 한다. 정수값을 직접 대입하는 이 단순 모형에서는 마지막에 price=120, backup=100이다. 반면 변수가 같은 변경 가능한 객체를 참조하는 언어나 자료형이라면, 두 이름이 같은 대상을 가리키는 별칭인지 따로 확인해야 한다. 아래의 참조 공유는 이 단순 정수 대입과 구분해서 읽는다.

공유가 무엇인지 작은 기록 하나로 확인해 보자. 주문 기록 R의 수량은 3이고, a와 b가 모두 R을 가리킨다는 모형을 둔다. a를 통해 R의 수량을 4로 바꾸면 기록 R 자체가 바뀌므로 b를 통해 읽어도 4다. 반대로 b에 수량 3을 가진 별도의 복사 기록 S를 연결했다면 R을 4로 바꿔도 S는 3으로 남는다. 즉 “a와 b가 같은 기록을 찾는가, 같은 내용의 서로 다른 기록을 찾는가”를 그려 보면 공유 참조와 값 복사의 차이가 보인다. 구체적인 언어가 어떤 대입에서 이 모형을 쓰는지는 해당 자료형의 규칙을 확인한다.

위 세 줄을 실행한 뒤의 price는 120이다. 문자열 "20"을 명시적으로 수 20으로 변환해 더하면 140이고, price를 문자열로 바꾸어 "20"과 이어 붙이면 "12020"이다. 반면 변환을 지정하지 않은 price + "20"의 결과가 수인지, 문자열인지, 오류인지는 언어와 자료형 규칙에 달려 있다. 그러니 암묵 변환을 추측하지 말고 언어 규칙과 실제 자료형을 확인한다.

구분과 선택

대상질문바뀔 수 있는 것예
값실제 데이터는 무엇인가새 값을 만들 수 있음3, 서울, 참
변수어떤 이름으로 값을 찾는가연결된 값quantity
자료형어떤 값과 연산을 허용하는가언어 규칙·선언에 따름정수, 문자열

가능하면 변수 이름은 단위와 의미를 드러내게 짓고, 자료형은 잘못된 상태를 표현하기 어렵게 고른다. 예를 들어 status를 아무 문자열로 두면 오타도 값이 되지만, 허용 상태만 가진 자료형을 쓰면 잘못된 값을 일찍 막을 수 있다. 자동 형변환은 편하지만 "10" + 2가 12인지 "102"인지 문맥에 따라 달라질 수 있다. 그래서 외부 값이 들어오는 입구에서는 명시적으로 변환하는 편이 안전하다.

실패조건과 방어

초기화하지 않은 값을 쓰는 실수는 변수가 유효한 값과 연결되기 전에 그 값을 읽을 때 생긴다. 생성할 때 기본값을 명확히 두거나, 사용하기 전에 반드시 초기화하게 만든다.

서로 다른 단위를 섞는 실수는 원화와 달러, 초와 밀리초를 모두 숫자로만 표현해 구별하지 못할 때 생긴다. 이름이나 별도 자료형, 입력 지점의 변환으로 단위를 구분한다.

공유 참조가 뜻밖에 바뀌는 문제는 두 변수가 같은 변경 가능한 객체를 가리키는데 독립된 복사본이라고 믿을 때 생긴다. 복사인지 참조 공유인지 확인하고, 변경하는 곳을 한곳으로 모은다.

범위와 빈 값을 빠뜨리는 실수는 음수가 될 수 없는 수량이나 값이 없는 상태를 일반 정수 하나로 억지로 표현할 때 생긴다. 허용 범위와 값이 없는 상태를 자료형과 검증 규칙에 넣는다.

교육용 주문 검증을 실제로 정해 보자. 단가는 원 단위 정수로 0부터 1,000,000까지, 수량은 정수로 1부터 99까지 허용하고, 상태는 접수·확정·취소 중 하나로 제한한다. 합계 형식은 최대 1,000,000×99=99,000,000원을 담을 수 있어야 한다. 입력을 받는 쪽은 문자열 단가 "1200"과 수량 "3"을 먼저 정수로 바꾸고 범위를 확인해, 내부 단가 1200원과 수량 3, 합계 3600원을 만든다. 수량 "ABC"는 숫자로 읽지 못하므로 형식 오류다. "100"은 숫자로 읽혀도 범위 오류이고, 누락은 필수값 오류다. 이런 경우에는 오류를 돌려주고 주문을 확정하지 않는다. 수량 0을 기본값으로 채워 조용히 진행하는 방식은 누락과 실제 0을 섞고 최소수량도 어기므로 제외한다.

자체 10점 문제

값·변수·자료형의 차이와 연산 시 주의점을 설명하시오.

요구어는 설명이다. 실제 데이터와 이름 연결, 허용 연산, 오류가 나는 조건을 나누어 쓴다.

10점 풀이 방향과 모범답안 보기

10점 답안 목차

  1. 값
  2. 변수와 대입
  3. 자료형과 허용 연산
  4. 별칭·암묵변환
  5. 범위·단위 검증

10점 답안 도식

이름·값·자료형의 관계를 대조한다. 변수 이름은 실제 값을 찾거나 보관하고, 자료형은 그 값에 가능한 연산과 오류 규칙을 정한다. 같은 이름의 값이 바뀌는 대입과 여러 이름의 공유 참조는 구별한다.

모범답안 축약본: 값의 의미를 자료형과 값 검사에 담는다

값은 계산과 저장의 실제 데이터이고, 변수는 실행 중 값을 찾거나 바꿀 수 있도록 붙인 이름이며, 자료형은 가능한 값의 집합과 허용 연산 및 해석 규칙이다. quantity = 3에서 3은 값이고 quantity는 변수이며, 음수 불가나 정수 덧셈 같은 규칙은 자료형과 검증이 정한다. 대입은 수학식처럼 영구 관계를 선언하는 것이 아니라 계산한 현재 값을 변수에 연결한다. 안전한 설계는 단위, 범위, 값이 없을 가능성, 허용 상태를 이름과 자료형에 표현하고 외부 입력이 들어오는 지점에서 검증한다. 서로 다른 통화를 같은 수로 더하거나, 두 변수가 같은 변경 가능한 객체를 공유하는데 복사본으로 오해하면 오류가 난다. 따라서 값 복사와 참조 공유를 구분하고, 변경하는 곳을 한곳에 모으며, 잘못된 상태를 만들 수 없는 연산만 공개한다.

자체 25점 문제

주문 금액·수량·상태 값을 안전하게 다루는 자료형·검증 경계를 설계하시오.

요구어는 설계다. 값의 의미·단위·범위와 내부 자료형, 외부 입력 검증을 연결한다.

25점 풀이 방향과 모범답안 보기

25점 답안 목차

  1. 값·단위 목록
  2. 변수 이름과 의미
  3. 내부 자료형
  4. 경계 입력 파싱
  5. 범위·필수값 검사
  6. 암묵변환 금지
  7. 오류 응답
  8. 테스트 경계값

25점 답안 도식

외부 문자열은 검증을 통과해야 업무 값이 된다 · 상태 따라가기

문자열 1200과 3을 금액·수량으로 읽기 전에 필수·형식을 확인한다. 모든 단계에서 입력 값·변환·판정의 위치를 유지하며 값과 허용 조건을 함께 확인합니다.

외부 문자열은 검증을 통과해야 업무 값이 된다

상자 안의 대상과 화살표의 조건을 함께 읽으세요. 좁은 화면에서는 같은 관계를 세로로 재배치한 도식을 보여 줍니다.

외부 문자열은 검증을 통과해야 업무 값이 된다외부 문자열 1200과 3은 정수로 파싱하고 단가·수량·필수값을 검사한 뒤 원 단위 내부 값으로 계산해 3600원을 만든다. ABC는 형식, 100은 수량 범위, 누락은 필수값 오류다. 오류가 있는 주문은 확정하지 않으며 누락을 0으로 보정하지 않는다. 내부 값은 타입·단위·범위 계약을 함께 갖는다.input → parse: 파싱parse → range: 정수parse → error: 형식·누락range → internal: 유효range → error: 범위 오류internal → operation: 업무 연산파싱정수형식·누락유효범위 오류업무 연산외부 문자열: 1200 · 3외부 문자열1200 · 3형식 판독: 정수인가?형식 판독정수인가?범위 검사: 범위 안인가?범위 검사범위 안인가?내부 계약 값: 원·수량·상태 단위·범위 확인내부 계약 값원·수량·상태단위·범위 확인합계 3600원: 1200원 × 3합계 3600원1200원 × 3오류 응답: ABC: 형식 / 100: 범위 누락: 필수값 오류오류 응답ABC: 형식 / 100: 범위누락: 필수값 오류
외부 문자열은 검증을 통과해야 업무 값이 된다외부 문자열 1200과 3은 정수로 파싱하고 단가·수량·필수값을 검사한 뒤 원 단위 내부 값으로 계산해 3600원을 만든다. ABC는 형식, 100은 수량 범위, 누락은 필수값 오류다. 오류가 있는 주문은 확정하지 않으며 누락을 0으로 보정하지 않는다. 내부 값은 타입·단위·범위 계약을 함께 갖는다.input → parse: 파싱parse → range: 정수parse → error: 형식·누락range → internal: 유효range → error: 범위 오류internal → operation: 업무 연산파싱정수형식·누락유효범위 오류업무 연산외부 문자열: 1200 · 3외부 문자열1200 · 3형식 판독: 정수인가?형식 판독정수인가?범위 검사: 범위 안인가?범위 검사범위안인가?내부 계약 값: 원·수량·상태 단위·범위 확인내부 계약 값원·수량·상태단위·범위 확인합계 3600원: 1200원 × 3합계 3600원1200원 × 3오류 응답: ABC: 형식 / 100: 범위 누락: 필수값 오류오류 응답ABC: 형식 / 100:범위누락: 필수값 오류

외부 문자열 1200과 3은 정수로 파싱하고 단가·수량·필수값을 검사한 뒤 원 단위 내부 값으로 계산해 3600원을 만든다. ABC는 형식, 100은 수량 범위, 누락은 필수값 오류다. 오류가 있는 주문은 확정하지 않으며 누락을 0으로 보정하지 않는다. 내부 값은 타입·단위·범위 계약을 함께 갖는다.

이 예의 조건

  • 외부 문자열 1200과 3은 정수로 파싱하고 단가·수량·필수값을 검사한 뒤 원 단위 내부 값으로 계산해 3600원을 만든다. ABC는 형식, 100은 수량 범위, 누락은 필수값 오류다. 오류가 있는 주문은 확정하지 않으며 누락을 0으로 보정하지 않는다. 내부 값은 타입·단위·범위 계약을 함께 갖는다.
  • 이 원문의 교육용 사례·조건 안에서 상태를 대조합니다. 실제 구축·실험 결과나 원문에 없는 성능 보장을 추가하지 않습니다.
관계도의 보충 설명
원그림의 모든 대상과 설명
대상원 설명
외부 문자열1200 · 3
형식 판독정수인가?
범위 검사범위 안인가?
내부 계약 값원·수량·상태 / 단위·범위 확인
합계 3600원1200원 × 3
오류 응답ABC: 형식 / 100: 범위 / 누락: 필수값 오류
원그림의 모든 관계와 조건
연결원 라벨·방향
외부 문자열 → 형식 판독파싱 / 정방향 / 실선
형식 판독 → 범위 검사정수 / 정방향 / 실선
형식 판독 → 오류 응답형식·누락 / 정방향 / 실선
범위 검사 → 내부 계약 값유효 / 정방향 / 실선
범위 검사 → 오류 응답범위 오류 / 정방향 / 실선
내부 계약 값 → 합계 3600원업무 연산 / 정방향 / 실선
예의 값과 변화
관찰·상황값·보충 정보변화·이유
문자 입력

문자열 1200과 3을 금액·수량으로 읽기 전에 필수·형식을 확인한다.

  • 입력 값: 1200·3
  • 변환·판정: 변환 전
  • 누락을 임의 값으로 채워 성공시키지 않는다.
형식·범위

ABC는 형식 오류, 범위 위반은 별도 오류이며 유효한 1200·3만 계산한다.

  • 입력 값: 유효 입력만 통과
  • 변환·판정: 형식·범위 확인
  • 형식 성공만으로 값의 허용 범위가 보장되지 않는다.
계산 결과

검사를 통과한 값으로 1200×3=3600원을 계산한다.

  • 입력 값: 1200×3
  • 변환·판정: 결과 3600원
  • 불허 입력의 중간 결과를 정상 금액으로 반환하지 않는다.

외부 문자열은 검증을 통과해야 업무 값이 된다 · 상태 따라가기

문자열 1200과 3을 금액·수량으로 읽기 전에 필수·형식을 확인한다. 모든 단계에서 입력 값·변환·판정의 위치를 유지하며 값과 허용 조건을 함께 확인합니다.

외부 문자열은 검증을 통과해야 업무 값이 된다

상자 안의 대상과 화살표의 조건을 함께 읽으세요. 좁은 화면에서는 같은 관계를 세로로 재배치한 도식을 보여 줍니다.

외부 문자열은 검증을 통과해야 업무 값이 된다외부 문자열 1200과 3은 정수로 파싱하고 단가·수량·필수값을 검사한 뒤 원 단위 내부 값으로 계산해 3600원을 만든다. ABC는 형식, 100은 수량 범위, 누락은 필수값 오류다. 오류가 있는 주문은 확정하지 않으며 누락을 0으로 보정하지 않는다. 내부 값은 타입·단위·범위 계약을 함께 갖는다.input → parse: 파싱parse → range: 정수parse → error: 형식·누락range → internal: 유효range → error: 범위 오류internal → operation: 업무 연산파싱정수형식·누락유효범위 오류업무 연산외부 문자열: 1200 · 3외부 문자열1200 · 3형식 판독: 정수인가?형식 판독정수인가?범위 검사: 범위 안인가?범위 검사범위 안인가?내부 계약 값: 원·수량·상태 단위·범위 확인내부 계약 값원·수량·상태단위·범위 확인합계 3600원: 1200원 × 3합계 3600원1200원 × 3오류 응답: ABC: 형식 / 100: 범위 누락: 필수값 오류오류 응답ABC: 형식 / 100: 범위누락: 필수값 오류
외부 문자열은 검증을 통과해야 업무 값이 된다외부 문자열 1200과 3은 정수로 파싱하고 단가·수량·필수값을 검사한 뒤 원 단위 내부 값으로 계산해 3600원을 만든다. ABC는 형식, 100은 수량 범위, 누락은 필수값 오류다. 오류가 있는 주문은 확정하지 않으며 누락을 0으로 보정하지 않는다. 내부 값은 타입·단위·범위 계약을 함께 갖는다.input → parse: 파싱parse → range: 정수parse → error: 형식·누락range → internal: 유효range → error: 범위 오류internal → operation: 업무 연산파싱정수형식·누락유효범위 오류업무 연산외부 문자열: 1200 · 3외부 문자열1200 · 3형식 판독: 정수인가?형식 판독정수인가?범위 검사: 범위 안인가?범위 검사범위안인가?내부 계약 값: 원·수량·상태 단위·범위 확인내부 계약 값원·수량·상태단위·범위 확인합계 3600원: 1200원 × 3합계 3600원1200원 × 3오류 응답: ABC: 형식 / 100: 범위 누락: 필수값 오류오류 응답ABC: 형식 / 100:범위누락: 필수값 오류

외부 문자열 1200과 3은 정수로 파싱하고 단가·수량·필수값을 검사한 뒤 원 단위 내부 값으로 계산해 3600원을 만든다. ABC는 형식, 100은 수량 범위, 누락은 필수값 오류다. 오류가 있는 주문은 확정하지 않으며 누락을 0으로 보정하지 않는다. 내부 값은 타입·단위·범위 계약을 함께 갖는다.

이 예의 조건

  • 외부 문자열 1200과 3은 정수로 파싱하고 단가·수량·필수값을 검사한 뒤 원 단위 내부 값으로 계산해 3600원을 만든다. ABC는 형식, 100은 수량 범위, 누락은 필수값 오류다. 오류가 있는 주문은 확정하지 않으며 누락을 0으로 보정하지 않는다. 내부 값은 타입·단위·범위 계약을 함께 갖는다.
  • 이 원문의 교육용 사례·조건 안에서 상태를 대조합니다. 실제 구축·실험 결과나 원문에 없는 성능 보장을 추가하지 않습니다.

관계도의 보충 설명

원그림의 모든 대상과 설명
대상원 설명
외부 문자열1200 · 3
형식 판독정수인가?
범위 검사범위 안인가?
내부 계약 값원·수량·상태 / 단위·범위 확인
합계 3600원1200원 × 3
오류 응답ABC: 형식 / 100: 범위 / 누락: 필수값 오류
원그림의 모든 관계와 조건
연결원 라벨·방향
외부 문자열 → 형식 판독파싱 / 정방향 / 실선
형식 판독 → 범위 검사정수 / 정방향 / 실선
형식 판독 → 오류 응답형식·누락 / 정방향 / 실선
범위 검사 → 내부 계약 값유효 / 정방향 / 실선
범위 검사 → 오류 응답범위 오류 / 정방향 / 실선
내부 계약 값 → 합계 3600원업무 연산 / 정방향 / 실선
예의 값과 변화
관찰·상황값·보충 정보변화·이유
문자 입력

문자열 1200과 3을 금액·수량으로 읽기 전에 필수·형식을 확인한다.

  • 입력 값: 1200·3
  • 변환·판정: 변환 전
  • 누락을 임의 값으로 채워 성공시키지 않는다.
형식·범위

ABC는 형식 오류, 범위 위반은 별도 오류이며 유효한 1200·3만 계산한다.

  • 입력 값: 유효 입력만 통과
  • 변환·판정: 형식·범위 확인
  • 형식 성공만으로 값의 허용 범위가 보장되지 않는다.
계산 결과

검사를 통과한 값으로 1200×3=3600원을 계산한다.

  • 입력 값: 1200×3
  • 변환·판정: 결과 3600원
  • 불허 입력의 중간 결과를 정상 금액으로 반환하지 않는다.

25점 모범답안

먼저 주문 금액은 통화와 배율을, 수량은 허용 최소·최대를, 상태는 허용 집합을 정한다. 외부 입력 문자열은 그대로 내부 값으로 쓰지 않고, 입력을 받는 지점에서 파싱해 형식·범위·누락을 검증한다.

변수 이름은 amountMinorUnit, quantity처럼 의미와 단위를 드러내고, 서로 다른 자료형이나 단위를 암묵 변환으로 섞지 않는다. VT-1처럼 값 대입과 참조 별칭의 차이를 확인하고, 변경 가능한 객체를 공유한다면 어디에서 바꿀 수 있는지 명시한다.

잘못된 입력은 정상 값으로 보정해 숨기지 않고 오류로 반환한다. 테스트에는 0, 최댓값, 최댓값+1, 빈 값, 잘못된 문자열을 넣는다. 자료형을 골랐다고 업무 의미까지 저절로 지켜진다고 보지 않으므로, 값 검증과 단위 규칙을 함께 둔다.

앞의 교육용 검증에서는 원 단위 정수 단가 0부터 1,000,000까지, 수량 1부터 99까지, 허용 상태 접수·확정·취소를 규칙으로 채택한다. 합계 형식은 99,000,000원까지 담을 수 있어야 하며, 외부 "1200"과 "3"을 변환·검증하면 3600원을 얻는다. 수량 "ABC"와 "100", 누락은 각각 형식·범위·필수값 오류로 분류하고 주문을 확정하지 않는다. 입력을 받는 쪽은 오류와 원 입력을 기록하고, 0·1·99·100·누락을 넣어 기대 결과와 대조한다. 공유 기록이 필요하다면 변경을 주문 모듈 한곳에 모으고, 독립 사본이 필요한 값과 구분한다.

출처와 적용 경계

본문은 안정된 프로그래밍 기초와 자체 대입 예를 사용한다. 이름의 객체 연결·자료형·변경 가능성의 한 구체 사례는 Python Language Reference §3.1과 §4.2에서 확인할 수 있다. 본문의 정수·공유 객체 표기는 학습용 모형이며 모든 언어가 Python과 같은 대입 의미를 갖는다는 뜻은 아니다. 값 복사·참조·암묵변환의 구체 동작은 언어와 자료형에 따라 다르므로 해당 언어 사양을 확인한다.

30초 정리

  1. 값은 실제 데이터, 변수는 값을 찾는 이름 붙은 요소, 자료형은 가능한 값과 연산의 규칙이다.
  2. 대입은 현재 계산한 값을 변수와 연결하며 수학식의 영구 관계가 아니다.
  3. 자료형과 이름에 단위·범위·부재·허용 상태를 담으면 잘못된 연산과 상태를 일찍 막을 수 있다.

자기교정과 조건 변경

잘못 쓴 답수정복습
변수는 값 자체다변수는 값을 가리키거나 보관하는 이름/요소다정의
숫자 100은 어디서나 같은 의미다자료형·단위·문맥이 다를 수 있다값 연결
대입은 항상 완전한 복사다참조·객체 의미는 언어와 자료형을 확인한다VT-1
자료형만 맞으면 업무값도 유효하다범위·단위·상태 검증이 별도다실패
문자열과 숫자 + 결과는 당연히 140이다암묵변환 규칙을 추측하지 않는다VT-1

조건을 바꿔 보자. backup도 120이 되게 하려면 세 줄 뒤에 backup = price를 다시 실행하면 되고, 이 단순 정수 모형에서 backup=120이 된다. 이는 현재 값을 다시 대입한 것이므로 이후 price가 바뀌어도 backup이 저절로 따라 바뀌지는 않는다. 이후의 변경까지 함께 보이게 하려는 경우에만 변경 가능한 상태의 공유와 언어·자료형 규칙을 따로 확인한다.

수량에 음수가 허용되지 않는다는 조건만 있다면 0 이상이 허용 범위다. 그런데 이 절의 주문 수량 규칙은 1부터 99까지여서 0도 거절한다. 그래서 정수 자료형 검사와 이 업무 범위 검사를 함께 적용한다.

100이 퍼센트라면 100, 1.0, 100% 중 어떤 표현을 쓸지 배율과 단위를 미리 정해 둔다.