Apple is Apple

일일 회고


오늘의 키워드

  • 기술면접 자문자답

자문자답

 

1. Kotlin이 정적 타입 언어라고 하는데 이유가 무엇일까요?

정적 타입 언어라는 것을 알기 위해서는 정적 타입 언어에 대한 개변과 동적 타입 언어의 개념도 함께 알아야 한다.

정적 타입 언어란 컴파일 타임(빌드)에서 타입 검증하는 언어이다.

 

반면에 동적 타입 언어는 컴파일 타임에 타입 검증을 하지 않고 런타임, 즉 프로그램 실행 중에 타입 검증을 한다.

var a = 1 // int 형 선언
a = "123" // String 값 대입

위는 간단한 예제인데, 코틀린에서 작성해보면 바로 에러 표시(Type Mismatch)가 뜰 것 이다.

 

이런 간단한 예제로 코틀린이 정적 타입 언어라는 것을 알 수 있다. 근데 한 가지 의문점이 있다.

따로 타입을 선언하지 않았는데 어떻게 컴파일러가 타입을 아는 것일까?

 

코틀린에서 형식을 지정해주지 않았음에도 불구하고, Type Mismatch라는 에러를 뿜어내었다.

어떻게 그럴 수 있을까?

이 시점에서 자바스크립트를 살펴보자

 

var a = 1 // int 형 선언
a = "123" // String 값 대입

위는 자바스크립트로 구성한 간단한 예제이다. 위의 코틀린 코드와 형식이 완전히 같지만 자바스크립트에서는 오류가 나지 않는다. 자바스크립트는 동적 타입 언어이기 때문이다.

 

코틀린과 자바스크립트의 코드 구성이 같지만, 언어의 타입은 다르다.

 

이렇게 될 수 있는 이유는, 코틀린은 타입 추론(type inference) 이라는 기능을 갖고 있기 때문이다.

 

타입 추론이란 컴파일러가 문맥으로부터 변수 타입을 자동으로 유추하여 개발자가 타입 선언을 생략할 수 있게 해준다.

그래서 위 코틀린의 예제 코드에서는 var a = 1이란 값을 Int 형으로 판단을 했고, a = “123”이라는 문자열로 바꾸려고 했기 때문에 에러가 발생한 것이다.

2.  함수형 프로그래밍과 객체지향 프로그래밍의 차이

객체 지향 프로그래밍과 함수형의 차이는 데이터(상태)를 다루는 개념과, ‘간결한 코드 작성’에 대한 관점 차이가 있다.

 

객체지향이 함수의 동작부를 캡슐화해서 코드를 이해할 수 있게 한다면, 함수형 프로그래밍은 동작부를 최소화해서 코드 이해를 돕는다.

 

객체지향 프로그래밍의 경우, 클래스 디자인과 객체들의 관계를 중심으로 코드 작성이 이루어진다. 그렇기 때문에 멤버변수, 메서드 등이 긴밀한 관계를 가지고 있다. 특히 멤버변수가 어떤 상태를 가지고 있는 가에 따라 결과가 달라진다.

 

함수형 프로그래밍의 경우, 값의 연산 및 결과 도출 중심(수학의 함수-f(x) = y 처럼)으로 코드 작성이 이루어진다. 함수 내부에서 인자로 받은 값을 별도로 저장하거나 하지 않고, 외부에서 값을 받아 계산하지 않아 순수한 함수 형태로 만든다, 그렇기 때문에 과정이 간결하다. 값을 매핑 하는데에 주 목적을 둔다.

 

함수형 언어에서는 함수(Function) 자체가 일급 객체가 되겠지만,

객체지향 언어에서는 클래스(또는 객체, Object)가 일급 객체가 된다

일급 객체란 ?
다른 요소들과 아무런 차별이 없는 객체.
즉, 함수의 인자로도 넘겨질 수 있고, 변수에 대입도 가능한 객체를 일급 객체.
(코틀린에서는 람다 (() → 의 형태)를 일급 객체로 사용 할 수 있다.
일급 객체의 명확한 정의
모든 일급 객체는 함수의 매개변수가 될 수 있다.
모든 일급 객체는 함수의 결과로서 반환 될 수 있다.
모든 일급 객체는 변수 할당의 대상이 될 수 있다.
모든 일급 객체는 비교 연산을 적용할 수 있다.

 

profile

Apple is Apple

@mjjjjjj