팬 레 터 프로 그래 밍 (5) - 데이터 구조 (함수 데이터 구조)

3414 단어 function
프로 그래 밍 은 바로 데 이 터 를 연산 하 는 과정 을 작성 하 는 것 이다.특수 한 연산 은 반드시 특정한 데이터 구조 로 효과 적 인 연산 을 지원 해 야 한다.데이터 구조의 지원 이 없 으 면 우 리 는 모든 데이터 에 메모리 주 소 를 설명 한 다음 에 이 주 소 를 사용 하여 이 데 이 터 를 조작 할 수 밖 에 없다. 즉, 우리 가 익숙 한 설명 변 수 를 다시 변 수 를 읽 고 쓰 는 과정 이다.데이터 구조 가 없다 면 몇 개의 변 수 를 설명해 야 할 지 생각해 보 자.그래서 데이터 구 조 는 모든 프로 그래 밍 에 없어 서 는 안 될 요소 이다.
    팬 레 터 프로 그래 밍 은 팬 레 터 데이터 구조 (Functional Data Structure) 를 사용 하여 팬 레 터 프로그램 을 지원 합 니 다.팬 레 터 데이터 구조의 특징 은 '가 변 적 특성' (Immutability) 으로 팬 레 터 프로 그래 밍 에서 함수 조합 (coposition) 이 필요 하 다 는 것 이다. 따라서 다른 프로 그래 밍 범주 와 달리 팬 레 터 프로 그래 밍 의 팬 레 터 데이터 구 조 는 반드시 특정한 데이터 연산 방식 을 구체 적 으로 해 야 한다.
팬 레 터 데이터 구조 및 연산 방법 은 다음 과 같은 특징 을 가진다.
1. 불가 변성 (Immutable)
2. 연산 은 데이터 구조 에서 이 루어 집 니 다. 중간 변 수 를 사용 하지 않도록 합 니 다.
3. 연산 은 새로운 데이터 구 조 를 결과 로 되 돌려 줍 니 다.
우 리 는 먼저 익숙 한 OOP 데이터 연산 스타일 을 살 펴 보 자.
1 scala> var arr = Array(1,2,3) 2 arr: Array[Int] = Array(1, 2, 3)
1 scala> var sum = arr(0)+arr(1)+arr(2) 2 sum: Int = 6

이상 의 연산 은 중간 변수 가 필요 합 니 다. 또한 구조 밖에서 진행 되 었 습 니 다. 먼저 데 이 터 를 주소 에서 읽 고 추가 합 니 다.
1 scala> arr(0) = sum 2 

3 scala> arr 4 res9: Array[Int] = Array(6, 2, 3)

직접 값 을 부여 한 후 arr 내용 이 바 뀌 었 습 니 다. 여기 서 arr 는 "가 변 적"(Mutable) 데이터 구조 입 니 다. 분명 한 것 은 다음 에 arr 를 다시 사용 해 야 할 때 내용 의 일치 성 을 보장 할 수 없습니다.
팬 레 터 스타일 다시 보기:
1 scala> val arr = Array(1,2,3) 2 arr: Array[Int] = Array(1, 2, 3) 3 scala> val sum = arr.sum 4 sum: Int = 6

팬 레 터 연산 은 데이터 구조 내 에서 직접 진행 되 며 중간 변 수 는 필요 없다.
1 scala> val arr1 = arr map { x => if(x == 1) sum else x } 2 arr1: Array[Int] = Array(6, 2, 3) 3 

4 scala> arr 5 res10: Array[Int] = Array(1, 2, 3)

arr 1 은 할당 후 새로운 데이터 구조 입 니 다. arr 는 변화 가 없습니다. 그러면 우 리 는 안심 하고 arr 를 사용 하여 함수 조합 을 할 수 있 습 니 다.
여기 서 오해 가 있 을 수 있 습 니 다. arr 1 은 arr 내 데 이 터 를 복사 한 다음 에 내용 을 수정 하기 때문에 arr 는 변 하지 않 았 습 니 다. 이렇게 이해 하 는 것 이 옳 고 그 름 도 있 습 니 다. 효과 적 으로 arr 1 은 arr 을 복사 한 것 입 니 다. 그러나 구체 적 인 방법 으로 시스템 은 arr (0) 아래 노드 의 지침 을 arr 1 (0) 로 가리 키 고 실질 적 인 데 이 터 를 복사 하지 않 았 습 니 다.

좋은 웹페이지 즐겨찾기