더북(TheBook)

2.6.3 동적 타이핑

R의 함수는 입출력의 형식, 즉 타입에 엄격하지 않기 때문에 좀 더 유연하다. 입력 유형은 호출하기 전에는 미리 고정되어 있지 않다. 본래 함수가 스칼라 값에서 동작하도록 설계했다 하더라도, 자동으로 일반화되어 + 연산자와 연동되는 모든 벡터에서도 연산을 수행한다. 예를 들어 함수 변경 없이 다음 코드를 실행할 수 있다.

> add(c(2, 3), 4)
[1] 6 7

사실 스칼라 값 역시 R에서는 벡터로 다루므로, 엄밀히 말해 앞 예제는 실제로 동적 타이핑의 유연성을 보여 주지는 않는다.

> add(as.Date("2014-06-01"), 1)
[1] "2014-06-02"

이 함수는 별도의 타입 확인 없이 인수 2개를 그대로 표현식에 입력한다. as.Date()는 날짜를 표현하는 Date 객체를 만든다. add 함수는 추가 변경 없이도 Date 객체와 완벽하게 호환된다. 하지만 다음과 같이 두 인수에서 + 연산자가 잘 호환되지 않는다면 함수 호출은 실패한다.

> add(list(a = 1), list(a = 2))
Error in x+ y : non-numeric argument to binary operator
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.