본문 바로가기

IT 정보

[풀스택 개발] 다트의 심화 기능과 객체지향 프로그래밍

* 본포스팅은 <플러터와 Node.js로 시작하는 풀스택 개발>에서 발췌한 내용으로 작성되었습니다.

 

 

다트는 함수형 프로그래밍 언어의 특성을 가지고 있으며, 이는 자바스크립트, Haskell, Scala 등과 같은 다른 함수형 언어들과 공통점을 가집니다. 특히, 자바스크립트 개발자들은 다트의 구문과 개 념을 상당히 친숙하게 느낄 수 있습니다.

 

고급 함수 사용법

다트에서 함수는 단순히 코드의 재사용성을 높이는 도구를 넘어서, 프로그램의 기본 구성 요소로 작용합니다. 다트의 함수형 프로그래밍 특성은 개발자들에게 더 큰 유연성과 표현력을 제공하며, 고차 함수와 클로저와 같은 고급 기능을 통해 이를 실현합니다. 이러한 기능들은 데이터 변환, 이벤트 처리, 비동기 작업 등 다양한 프로그래밍 상황에서 유용하게 활용될 수 있습니다.

 

고차 함수
고차 함수란, 단순히 말해 “함수를 다루는 함수”입니다. 이 말은 우리가 평소에 변수에 숫자나 문자같은 값을 저장하는 것처럼, 고차 함수는 ‘함수’를 그 값으로 사용할 수 있다는 의미입니다. 그렇기 때문에 함수를 다른 함수에 인자로 넘겨주거나, 함수에서 새로운 함수를 만들어 내보낼 수 있습니다. 이런 특징 덕분에, 우리는 프로그래밍할 때 더 유연하게 코드를 짤 수 있습니다. 고차 함수의 장점은, 코드를 재사용하기 쉽게 만들어준다는 것입니다. 예를 들어, 여러분이 쇼핑 리스트에서 모든 가격을 두 배로 만들고 싶다고 가정할 때. 물론, 하나하나 직접 계산할 수도 있겠지만, 고차 함수를 사용하면 이 작업을 훨씬 간단하게 할 수 있습니다.

 

 

이 예제에서 processNumbers라는 함수는 고차 함수입니다. 이 함수는 다른 함수(여기서는 가격을 두 배로 만드는 연산을 수행하는 함수)를 인자로 받기 때문입니다. 이렇게 고차 함수를 사용하면, 같은 패턴의 작업이 필요할 때마다 새로운 코드를 작성하는 대신, 필요한 작업을 수행하는 함수만 전달해서 여러 상황에 대응할 수 있습니다. 고차 함수는 단지 리스트와 숫자에만 사용되는 것이 아니고. 웹 애플리케이션에서 사용자가 버튼을 클릭할 때 발생하는 이벤트를 처리하거나, 서버로부터 데이터를 받아온 후 실행할 작업을 정의할때도 고차 함수를 활용할 수 있습니다.

 

클로저
클로저는 함수가 자신이 생성될 때의 환경을 “기억”하고, 나중에 이 환경을 참조할 수 있는 기능을 가진 특별한 종류의 함수입니다. 이는 다트에서 함수가 정의된 시점의 변수나 상태를 함수가 호출되는 어떤 시점에서도 사용할 수 있도록 해줍니다. 이러한 특성 덕분에, 클로저는 함수 외부에서 접근할 수 없는 변수들을 포함하고 있어도, 그 변수들을 안전하게 “캡슐화”하고 사용할 수 있습니다. 이는 데이터의 안전성을 보장하고, 프로그램의 구조를 깔끔하게 유지하는 데 도움을 줍니다.

 

 

앞선 예제에서 02번째 줄 createIncrementer 함수는 클로저를 만들고 반환합니다. 이 클로저는 08번째 줄 createIncrementer 함수가 호출될 때 전달된 incrementBy 값(여기서는 2)을 기억합니다. 그 후, 09번째 줄과 10번째 줄 incrementByTwo 함수(클로저)를 호출하면, 이 함수는 저장해둔 incrementBy 값을 사용하여 입력된 숫자에 더한 결과를 반환합니다.

 


클로저의 활용은 프로그래밍에서 매우 유용합니다. 함수가 호출될 때마다 변할 수 있는 외부의 값들에 의존하지 않고, 자신만의 독립적인 작업 환경을 유지할 수 있기 때문입니다. 다트에서 클로저는 이벤트 핸들러, 비동기 작업의 콜백, 그리고 데이터 캡슐화 등 다양한 곳에서 사용됩니다.


람다 표현식과 익명 함수
람다 표현식은 함수를 간결하게 정의하는 방법을 제공합니다. 다트에서는 화살표(=>) 문법을 활용하여 이를 구현할 수 있습니다. 이러한 람다 표현식을 사용함으로써, 코드의 가독성을 높이고 작성 과정을 단순화할 수 있습니다. 익명 함수는 그 이름에서 알 수 있듯이, 이름을 가지지 않는 함수입니다. 주로 일회성으로 사용되며, 이벤트 처리나 변수에 함수를 할당할 때 유용하게 사용됩니다.

 

 

앞선 예제에서 multiply는 두 숫자를 곱하는 연산을 수행하는 람다 표현식을 사용한 함수입니다. 화살표 문법을 통해 간결하게 표현되어 있으며, 이는 (int a, int b)라는 입력 파라미터를 받아 a * b라는 연산의 결과를 반환합니다.

 

 

이 코드 조각에서 03번째 줄 names.forEach 구문에 사용된 함수는 익명 함수입니다. names 리스트의 각 요소에 대해 반복 실행되며, 리스트의 각 이름을 출력합니다. 여기서 익명 함수는 forEach 메서드에 직접 전달되어, 각 요소에 대한 특정 작업(여기서는 출력)을 수행합니다.

 

람다 표현식과 익명 함수는 다트 프로그래밍에서 함수를 보다 유연하게 사용할 수 있도록 돕습니다. 이를 통해 개발자는 복잡한 로직을 더 간결하고 명확하게 표현할 수 있으며, 코드의 재사용성과 유지 보수성을 개선할 수 있습니다. 이러한 기능들은 다트가 제공하는 함수형 프로그래밍의 강력한 도구 중 일부이며, 특히 이벤트 처리, 데이터 처리 등 다양한 상황에서 그 유용성이 빛을 발합니다.

 

옵셔널 파라미터와 기본값
다트에서 함수를 정의할 때 모든 파라미터를 필수로 지정하지 않아도 됩니다. 선택적으로 만들고 싶은 파라미터가 있다면, 다트는 이를 가능하게 하는 두 가지 방법을 제공합니다. 명명된 파라미터와 위치 기반 옵셔널 파라미터입니다.

 

명명된 파라미터는 중괄호 { }를 사용하여 정의됩니다. 함수를 호출할 때는 이 파라미터들의 이름을 명시적으로 작성해야 합니다. 이런 파라미터들은 호출 시에 생략이 가능하며, 기본값을 설정할 수도 있습니다. 이는 함수 호출에 더 많은 유연성을 부여하고, 코드의 가독성을 향상시킵니다.

 

위치 기반 옵셔널 파라미터는 대괄호 [ ]로 정의됩니다. 이 파라미터들은 정의된 순서대로 전달되어야 하며, 함수 호출 시 생략할 수 있습니다. 위치 기반 옵셔널 파라미터 역시 기본값을 가질 수 있어, 함수에 필요한 기본 동작을 설정할 수 있습니다.

 

 

앞선 예제에서 02번째 줄 greet 함수는 명명된 옵셔널 파라미터 prefix를 사용합니다. 함수를 호출할 때는 prefix: ‘Hello’ 형태로 파라미터의 이름과 값을 함께 제공합니다. 반면, greetNew 함수에서 prefix는 위치 기반 옵셔널 파라미터로, 함수 호출 시 순서에 맞게 값을 전달하거나 생략할 수 있습니다.

 

다트에서는 함수를 정의할 때 명명된 파라미터와 위치 기반 옵셔널 파라미터를 함께 사용할 수 없습니다. 이는 코드의 명확성을 유지하고, 함수의 사용 방법을 일관되게 만들기 위함입니다. 옵셔널파라미터와 기본값은 다트에서 함수의 유연성을 크게 향상시키며, 다양한 시나리오에서 함수를 효과적으로 사용할 수 있게 합니다.

 


 

《플러터와 Node.js로 시작하는 풀스택 개발》

예스24

 

 

반응형