본문 바로가기

값·변수·자료형·연산

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
타입만 맞으면 업무값도 유효하다범위·단위·상태 검증이 별도다실패
문자열과 숫자 + 결과는 당연히 120이다암묵변환 규칙을 추측하지 않는다VT-1

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

수량에 음수가 허용되지 않으면? 일반적인 음수 금지 조건은 0 이상이지만, 이 절의 주문 수량 계약은 1~99여서 0도 거절한다. 정수 타입 검사와 이 업무 범위 검사를 함께 적용한다.

100이 퍼센트라면? 100, 1.0, 100% 중 어떤 표현을 쓸지 배율·단위를 계약한다.