생각해보기
▶ 사람이 사용하는 숫자 '0'은 '없음'이라는 의미를 갖고있습니다. 프로그래밍에서 0은 없음을 나타낼 수 있을까요?
▶ 0이 있는데 nil 이라는 표현은 왜 존재하는 것일까요?
+)토론게시글 작성 시, [연관강의]를 지정해주시면 좀더 원활한 토론이 가능합니다:)
강의내용
생각해보기
▶ 사람이 사용하는 숫자 '0'은 '없음'이라는 의미를 갖고있습니다. 프로그래밍에서 0은 없음을 나타낼 수 있을까요?
▶ 0이 있는데 nil 이라는 표현은 왜 존재하는 것일까요?
+)토론게시글 작성 시, [연관강의]를 지정해주시면 좀더 원활한 토론이 가능합니다:)
강의내용
1. Any
var someAny: Any = 100
someAny = "어떤 타입도 수용 가능합니다"
someAny = 123.12
// Any 타입에 Double 자료를 넣어두었더라도 Any는 Double 타입이 아니기 때문에 할당할 수 없습니다.
// 명시적으로 타입을 변환해 주어야 합니다. (타입 변환은 차후에 다룹니다.)
let someDouble: Double = someAny // 컴파일 오류발생
2. AnyObject
(클래스와 프로토콜에 대한 설명은 차후에 합니다.)
class SomeClass {}
var someAnyObject: AnyObject = SomeClass()
// AnyObject는 클래스의 인스턴스만 수용 가능하기 때문에 클래스의 인스턴스가 아니면 할당할 수 없습니다.
someAnyObject = 123.12 // 컴파일 오류발생
3. nil
// someAny는 Any 타입이고, someAnyObject는 AnyObject 타입이기 때문에 nil을 할당할 수 없습니다.
var someAny: Any = 100
var someAnyObject: AnyObject = SomeClass()
// nil을 다루는 방법은 옵셔널 파트에서 다룹니다.
someAny = nil // 컴파일 오류발생
someAnyObject = nil // 컴파일 오류발생
https://goo.gl
http://www.edwith.org
comment
컴퓨터는 0,1을 사용하여 비트로 표현해왔기 때문에 숫자 0이 아무것도 없는 것이 아닌 "없다"라는 의미를 가지게 되어 아무것도 없음을 표현하기 위해 nil을 대신 사용한다고 생각합니다.
컴퓨터는 Bit 연산을 하기 때문에 1Bit에서는 0과 1이라는 값으로 계산을 함
그렇기 때문에 0과 1이라는 값도 메모리에 값으로 할당되어 0 또한 값이 있는 것으로 컴퓨터가 인식
고로, 0은 0이라는 값으로 존재, Nil(Null)은 메모리에 아무런 값도 없다는 뜻으로 존재 하지 않을까 라고 생각해봅니다...
사람은 당연히 0이라는 숫자를 만들어내어서 알 수 있고 단어의 의미또한 해석가능합니다. 무언가가 없다 이 뜻을 알고 있는 지능동물이기도 해요 하지만 컴퓨터는 0이라는 숫자에 관해 그 값도 또한 하나의 데이터로 읽히고 실제로 값이 없음을 알만한 다른 대체어가 없기 떄문에 nil이라는 대체어를 쓰는 것이 아닐까 합니다.
사람은 context에 따라 0이라는 단어를 '없음'으로 이해할수도 '0이란 숫자'라고 이해할 수도 있다. 하지만 모든 것이 명확해야 하는 (i.e. 하나의 단어가 하나의 의미만 지녀야 하는) 컴퓨터의 세계에서 '0'이라는 것은 '0이란 숫자'를 위한 reserved word로 사용되어야 하고, '없음'을 나타내는 별개의 표현이 필요하다. 따라서
1. 조건문 등을 통해 0을 '없음'이란 것을 표현하는 state로 만들 순 있겠지만, 결국 Int나 Float type의 0이다.
2. 위에 이미 설명함
1. 프로그램에서 int값을 예로 들었을 때, C언어에서 처음 선언시 자동적으로 0이 들어가긴 하지만, 그 후 실제로 0이 할당되는 과정이 존재하기 때문에 없음이라고 볼수 없다.
2. 그리하여 0을 없음이라고 볼수 없기 때문에 실제적으로 "없음"을 의미하는 표현이 필요하고 c에서는 Null을 쓰듯이 Swift에서는 nil이라는 키워드를 선택한 것 같다.
1.프로그램에서 0은 Int라는 자료형이고 0이라는 값을 갖기 때문에 없음이라는 표현이 아니다.
2.그렇기 때문에 C,java에서 사용하는 null과 비슷한 nil을 사용하는 것으로 생각됨.
암시적 형변환 불가능함 > as!