result = None
while result != 'y':
print('파이썬 최고!')
result = input('계속하려면 입력: (종료:y) ')
print('종료')
파이썬 소스 입니다. 여기에서 None 에 대해 정리합니다.
None은 파이썬에서만 사용하는 특별한 예약어입니다.
None의 의미와 사용법
None은 파이썬에서 "값이 없음(null)"을 나타내는 데 사용되는 고유한 상수입니다. 다른 프로그래밍 언어의 null, nil, 또는 undefined와 유사한 역할을 하지만, 파이썬에서는 오직 None이라는 키워드만 사용합니다.
- None은 값이 아닙니다: 숫자 0, 빈 문자열 "", 또는 빈 리스트 []와는 다릅니다. 이들은 모두 특정한 의미를 가진 값이지만, None은 "아무것도 할당되지 않은 상태"를 나타냅니다.
- None은 자료형입니다: None은 NoneType이라는 고유한 자료형에 속합니다. 즉, 변수에 None을 할당하면 그 변수는 NoneType 객체를 참조하게 됩니다.
- 함수의 기본 반환값: 파이썬 함수가 명시적으로 return 값을 지정하지 않으면, 함수는 기본적으로 None을 반환합니다.
다른 프로그래밍 언어에서의 유사 개념
파이썬이 아닌 다른 언어에서는 비슷한 개념을 다른 예약어로 표현합니다.
- C++, Java, C#: null
- JavaScript: null 또는 undefined
- Ruby: nil
- PHP: null
따라서 None은 파이썬의 독특한 키워드이며, 파이썬 코드의 가독성과 명확성을 높이는 데 중요한 역할을 합니다.
질문)
해당 변수에 '값이 없다' 즉, 메모리 공간에 아무것도 없이 텅 비어있는 상태 인가요?
결론부터 말하면, None은 메모리 공간에 아무것도 없이 텅 비어있는 상태가 아닙니다.
메모리와 None의 관계
변수는 데이터를 담는 상자가 아닙니다. 대신, 변수는 메모리 주소를 가리키는 이름표와 같습니다.
- 변수 생성 및 값 할당: 예를 들어 a = 5라는 코드를 실행하면, 파이썬은 5라는 정수 객체를 메모리 어딘가에 만들고, a라는 이름표가 그 객체의 메모리 주소를 가리키게 합니다.
- None 할당: a = None이라는 코드를 실행하면, a라는 이름표는 더 이상 정수 5를 가리키지 않습니다. 대신, 파이썬에서 특별히 정의된 None 객체의 메모리 주소를 가리키게 됩니다.
즉, None은 그 자체로 값이 없는 상태를 나타내는 하나의 객체입니다.
이 객체는 메모리 어딘가에 존재하며, 변수는 이 None 객체를 가리키는 것입니다. 따라서 변수가 '비어 있는' 것이 아니라,
'값이 없는 상태'를 나타내는 None이라는 특정 객체를 가리키고 있는 것입니다.
이러한 방식은 변수가 메모리에서 완전히 해제된 상태(즉, 변수 자체가 존재하지 않는 상태)와는 다릅니다.
변수에 None을 할당함으로써 개발자는 '이 변수는 현재 아무런 의미 있는 데이터를 가지고 있지 않다'는 것을 명시적으로 표시할 수 있습니다.
★ 개념정리 질문)
a=5에서 5라는 정수객체는 메모리 어딘가에 들어있습니다. 그 해당 메모리는 주소값이 100번지라고 하면 변수a는 100번지라는 주소값을 가지고 있어서, 가지고 있는게 주소값이므로, 값이 100번지값 이므로, 100번지를 가리키는 건가요?
네, 정확하게 이해하셨습니다. 변수 a는 100번지라는 실제 주소값을 저장하고 있으며, 이 주소값을 통해 메모리에 있는 정수 객체 5를 가리키게 됩니다.
변수와 메모리 주소의 관계
컴퓨터의 메모리는 아파트 단지처럼 수많은 방(메모리 공간)들로 이루어져 있고, 각 방에는 고유한 호수(주소)가 있습니다.
- 객체: 파이썬에서 5는 단순한 숫자가 아니라, 메모리에 저장된 '정수 객체'입니다. 이 객체는 메모리 어딘가(예: 100번지)에 위치합니다.
- 변수: a와 같은 변수는 이름표입니다. 이 이름표는 100번지라는 주소값을 담고 있습니다. 변수 a에 저장된 값은 '정수 5'가 아니라, '정수 5가 있는 곳의 주소'인 100입니다.
- 참조: 파이썬이 print(a)와 같은 명령을 받으면, a가 가지고 있는 주소(100번지)로 찾아가서 그곳에 있는 객체(5)를 가져와서 출력합니다. 이처럼 변수가 메모리 주소를 통해 객체를 찾아가는 것을 '참조(reference)'라고 합니다.
따라서 a = 5라는 코드는 "변수 a에 '5라는 객체가 저장된 메모리의 주소'를 할당하라"는 의미가 됩니다. 이것이 파이썬이 데이터를 관리하는 기본적인 방식입니다.
참고) 대소문자를 구분한다.
None과 none은 파이썬에서 다르게 취급됩니다. None은 파이썬의 특별한 예약어로, 값이 없음을 나타내는 고유한 객체입니다. 반면, none은 일반적인 변수 이름으로, 파이썬에서 특별한 의미를 갖지 않습니다.
대소문자의 중요성
파이썬은 대소문자를 구분하는 언어입니다. 따라서 None과 none은 전혀 다른 것으로 인식됩니다.
- None은 파이썬 인터프리터가 미리 정의해 둔 상수입니다.
- 이 키워드는 값이 없음을 나타내는 NoneType의 유일한 객체입니다. None을 변수에 할당하면, 그 변수는 이 특별한 객체를 참조하게 됩니다.
- none은 파이썬이 미리 정의한 키워드가 아닙니다. 따라서 name = 'none'과 같이 일반적인 문자열로 사용하거나, none = 123처럼 변수 이름으로 사용할 수 있습니다. 그러나 변수 이름으로 사용하면 혼동을 줄 수 있으므로 권장되지 않습니다.
간단히 말해, None은 파이썬에서 특별한 의미를 가지며 예약어로 사용되는 반면, none은 사용자가 임의로 만든 일반 변수 이름일 뿐입니다.
참고)
None는 C언어에서 null값과 같은건가요?
네, 파이썬의 None은 C언어의 null과 유사한 개념입니다. 둘 다 '값이 없음'을 나타내는 데 사용됩니다.
C언어의 null
C언어에서 null은 널 포인터(null pointer)를 의미합니다. 포인터는 메모리 주소를 저장하는 변수인데, null은 어떤 유효한 메모리 주소도 가리키지 않는 특별한 포인터 값입니다. 이는 특정 변수가 아무 객체도 참조하고 있지 않음을 나타낼 때 사용됩니다.
파이썬의 None
파이썬에서 None은 NoneType이라는 자료형에 속하는 유일한 값으로, 역시 '값이 없음'을 나타냅니다. C언어와 달리, 파이썬은 변수가 메모리 주소를 직접 다루지 않기 때문에 '널 포인터'라는 개념은 사용하지 않습니다. 대신, None은 '값이 없는 상태'를 나타내는 객체 그 자체입니다.
비교 요약
| 특징 | 파이썬의 None | C언어의 null |
| 개념 | 값이 없는 상태를 나타내는 객체 | 유효한 주소를 가리키지 않는 널 포인터 |
| 자료형 | NoneType | void* (일반적으로) |
| 사용 목적 | 변수에 유효한 값이 없음을 명시적으로 나타냄 | 포인터가 유효한 객체를 가리키지 않음을 나타냄 |
둘은 사용되는 방식과 언어의 내부 구조에서 차이가 있지만, '아무것도 가리키지 않거나, 유효한 값이 없음'이라는 목적은 동일합니다.
참고)
예를 들어 a = 5라는 코드를 실행하면, 파이썬은 5라는 정수 객체를 메모리 어딘가에 만들고, a라는 이름표가 그 객체의 메모리 주소를 가리키게 합니다.
None 할당:
a = None이라는 코드를 실행하면, a라는 이름표는 더 이상 정수 5를 가리키지 않습니다. 대신, 파이썬에서 특별히 정의된 None 객체의 메모리 주소를 가리키게 됩니다.
즉, None은 그 자체로 값이 없는 상태를 나타내는 하나의 객체입니다. 이 객체는 메모리 어딘가에 존재하며, 변수는 이 None 객체를 가리키는 것입니다. 따라서 변수가 '비어 있는' 것이 아니라, '값이 없는 상태'를 나타내는 None이라는 특정 객체를 가리키고 있는 것입니다.
여기에서 변수는 None 객체를 가리킨다고 했는데, 여기서 변수는 a, 이 a가 None객체가 있는 주소값을 a가 가지고 있어서 None 객체를 a가 가지고 있는 값이 주소값이므로 None를 가리킨다는 것인가요?
네, 맞습니다. 아주 정확하게 이해하셨습니다. 변수 a는 None 객체의 메모리 주소값을 가지고 있기 때문에 그 객체를 가리키는 것입니다.
메모리 주소와 변수의 역할
파이썬의 변수는 데이터를 직접 담는 '상자'가 아니라, '데이터가 어디에 있는지 알려주는 주소록' 역할을 합니다.
- a = 5: 이 코드는 다음과 같은 과정을 거칩니다.
- 메모리 어딘가에 정수 객체 5가 만들어집니다. 이 객체에는 고유한 메모리 주소(예: 100번지)가 부여됩니다.
- 변수 a에는 100번지라는 주소값이 할당됩니다. 따라서 a는 5라는 객체를 가리키게 됩니다.
- a = None: 이 코드는 a의 주소를 바꿔줍니다.
- 파이썬 내부에는 None이라는 특별한 객체가 이미 존재합니다. 이 객체 역시 고유한 메모리 주소(예: 200번지)를 가집니다.
- 기존에 100번지를 가리키던 변수 a는 이제 200번지라는 주소값을 새로 할당받습니다.
- 결과적으로, a는 더 이상 5를 가리키지 않고, None 객체를 가리키게 됩니다.
따라서 None을 할당한다는 것은 "변수 a가 이제부터 None 객체의 주소를 가리키게 하라"는 의미입니다. 변수 a에 저장되는 값은 None 객체 자체가 아니라, 그 객체가 위치한 메모리 주소인 것입니다.
'파이썬(Python)' 카테고리의 다른 글
| 파이썬에서 in 연산자 첫번째 역할 : in 연산자는 특정 값이 시퀀스(sequence) 또는 컬렉션(collection)에 포함되어 있는지 확인 (1) | 2025.08.30 |
|---|---|
| 파이썬, 복합 할당 연산자 (Compound Assignment Operators) (0) | 2025.08.29 |
| 파이썬, while문을 이용한 반복 출력 소스 (2) (0) | 2025.08.29 |
| 파이썬, while문을 이용한 반복 출력 소스 (1) (0) | 2025.08.29 |
| 파이썬 실행파일, IDE Shell로 연습한 소스를 실행파일로 만드는 방법 정리-(2 of 2) (3) | 2025.08.27 |
콘텐츠 내 자동삽입광고
