⁕기본노드 설명과 활용 및 약간의 파이썬을 알려드리는 시리즈 입니다.
오늘은 다이나모의 노드 중 리스트에 관한 것을,
그 중에서도 생성에 관한 노드를 살펴보겠습니다.
없던 리스트를 만들어 내는 기능에 대한 이야기니까 중요한데,
어렵지는 않습니다.
프로그램 언어의 종류를 막론하고,
1개의 개체를 다루는 코드와, 2개 이상의 코드를 다루는 코드는 구조가 다릅니다.
2개 이상을 다루는 코드의 재료가 되는 것 중 가장 이해하기 쉬운 것이 리스트입니다.
잘 보고 따라해보시면 좋겠습니다.
리스트 생성 노드 3총사
노드의 위치는 위 그림과 같습니다.
이번에는 List > Generate 카테고리에 있는 노드들을 먼저 살펴보고,
나중에는 Inspect, Match, Modify, Organize 카테고리도 살펴보겠습니다.
오늘은 하나씩 꺼내서 기능을 알아보고,
같은 기능을 다이나모의 코드블럭과, Python Script 를 활용해 동일하게 구현하는 것이 목표입니다.
List Create
List Create 노드는 원소가 될 개체들을 인자로 받아서 하나의 리스트를 생성해주는 노드입니다.
그림에서 보는 것처럼 item의 개수는 ‘+’나 ‘-’를 이용해 조절할 수 있습니다.
뿐만 아니라 노드를 반복사용하면 중첩리스트(Nested List) 구조도 쉽게 만들 수 있습니다.
보통 이 노드는 단순한 리스트를 만들때 쓰기 보다는,
다른 노드에서 리스트의 형태로 나온 결과들을 하나의 리스트로 합쳐줄 때 사용하게 됩니다.
Range
Range 노드는 수열을 만들어 내는 노드입니다.
리스트의 처음값과 마지막 값을 인자로 받고, 각 원소의 차이 값을 인자로 주면 해당하는 수열을 만들어 줍니다.
그런데 아무 것도 입력하지 않은 맨 위의 노드에도 0부터 9까지 1 씩 차이나는 수열이 자동으로 생성되있죠?
그 이유는 이 노드의 입력값이 전달되지 않을 때, 위 그림 처럼 기본값을 가지고 계산을 수행하도록 만들어져있기 때문입니다. 다른 노드의 기능을 파악할 때도 참고하세요.
이런 수열은 코딩을 하다보면 여러가지 상황에서 사용될 수 있는데, 나중에 구분해서 포스팅하겠습니다.
Range 노드를 중복해서 사용하면 이런 짓도 할 수 있습니다.
Sequence
Sequence 노드는 조금 다른 방법으로 수열을 만들어 줍니다.
그림에 보이는 빨간색 동그라미를 보면 알 수 있듯이,
amount 포트에 11을 입력하면 전체 수열의 개수가 11개가 되고,
아무것도 입력하지 않으면 기본값인 10을 적용해서 전체 개수가 10개인 등차수열을 만들어 줍니다.
반면, Range 노드는 처음과 끝을 지정한 뒤에 step 에 해당하는 등차를 가진 수열을 만들죠.
상황에 따라 더 적합한 노드를 사용하면 됩니다.
중복해서 쓰면 이렇게 시작값이 다른 여러가지 계차수열을 만들수 있습니다.(계차수열은 이웃하는 두 항의 차이가 등차수열이 되는 수열입니다.)
동일 기능을 코드블럭으로 구현하기
리스트를 만들어내는 3대장 노드들을 보셨습니다.
유용해 보이죠?
그런데 다이나모에서 이 기능들을 구현하는 것은, 기본노드 말고도 2가지 방법이 더 있습니다.
바로 코드블럭과 파이썬 스크립트 입니다.
먼저 동일한 기능을 코드블럭으로 구현하면 어떻게 되는지 한 번 볼게요.
코드블럭은, 간단한 기능인데 굳이 기본노드를 꺼내기가 부담스럽거나,
여러가지 기본노드의 기능을 하나로 축약해서 배치하고 싶을때 사용하는 노드입니다.
빈 캔버스에서 더블클릭을 하면 자동으로 생성되니까 굉장히 편리합니다.
List Create
List Create 기능을 코드블럭으로 구현하는 것은 아주 간단합니다.
- List를 나타내는 기호인 “[”와 “]” 를 배치하고,
- 그 안쪽에 원소의 개수 만큼 변수를 만들어 쉼표기호로 구분해주고,
- 자동으로 변수이름과 동일하게 생긴 입력포트에 원하는 값들을 연결해주기만 하면 됩니다.
엄청 쉽죠? 프로그램의 컨셉을 짤 때는 간결하게 이 방법으로 처리하는 경우가 많습니다.
Range
코드 블럭으로 Range 를 구현하는 것은 더 쉽습니다!
이것은 코드블럭에서 처리할 수 있는 ‘디자인 스크립트’라는 언어의 문법인데,
(처음) .. (마지막) .. (이웃한 두 숫자의 차이) 의 형태로 쓰면 됩니다.
마침표 2개를 연결고리로 써서 기본노드에 들어가는 인자 값들을 순서대로 써주기만 하면 됩니다.
Sequence
Sequence를 만들어내는 문법도 거의 동일합니다!
그런데 amount에 해당하는 숫자에는 앞쪽에 #이 붙어있죠?
이것만 주의 하면 됩니다.
#이 앞에 붙으면 그 숫자는 기준점이 아닌 양의 역할을 한다고 보시면 됩니다.
그래서 위 그림의 왼쪽 코드블럭을 보면,
0 ~10 의 범위에서, 3개의 개수를 갖는 등차수열을 만들어줍니다. (등차는 알아서 만들어줍니다.)
동일 기능 파이썬으로 구현하기
다이나모에서는 파이썬도 입력해서 사용할 수 있습니다!
조금더 구조화된 코드를 작성해서 프로그램의 흐름을 제어하기도 편하고,
너무 난잡하게 배치된 노드들로 인해 코드의 가독성이 크게 해쳐진 상황에서,
다수의 노드들을 하나의 파이썬 노드로 바꿔서 배치하면 좋습니다.
코드블럭의 경우처럼 파이썬으로도 동일한 기능을 하나 씩 구현해보도록 하죠.
List Create
파이썬에 익숙하지 않은 분을 위해 설명하자면, 위쪽에 회색 점선 부분은 지금은 무시해도 됩니다.
dataEnteringNode 라고 적힌 부분 부터가 의미있는 부분인데,
dataEnteringNode = IN 이라고 적힌 내용의 의미를 살펴보겠습니다.
그림의 우측을 보시면 빨간색 점선에 IN[0], IN[1]이라는 입력 포트가 있죠?
다이나모에서 만드는 파이썬 스크립트 노드는,
자동으로 개수 조절이 가능한 입력포트를 갖고 있고
이 입력포트들은 IN이라는 이름을 가진 리스트에 저장됩니다.
즉 입력포트의 모든 값들은 IN 이라는 리스트에 들어있다 라는 의미의 코드이죠.
따라서 IN 리스트를 곧장 OUT변수에 할당하기만 하면
List Create의 기능이 구현됩니다.
(OUT 변수에 할당된 값은 노드의 OUT 포트로 연결되어서 다른노드의 입력포트로 연결할 수 있게 됩니다.)
동일한 입력값을 연결했더니 기본노드와 아래쪽의 파이썬 노드가 동일한 결과를 보여줍니다!
Range
Range 기능을 구현하는 것은 아까보다는 조금 복잡해보입니다.
그런데 if 가 적힌 부분은 입력포트의 기본값을 세팅하는 부분이라 무시해도 됩니다.
코드를 크게 4부분으로 나누는데, 1번과 4번은 아까 설명했죠?
2번 함수 선언부에서는 start, end, step 의 세가지 숫자를 받아서 수열을 만드는 함수를 선언합니다.
(함수가 수행할 내용을 적는 것이죠.)
이름은 mk_range라고 지어줬습니다. make range라는 뜻이겠죠?
if 를 제외하고 보면,
return range(start, end+1, step) 이라는 문구만 남습니다.
return은 함수가 실행되었을 때 바깥으로 넘겨줄 함수의 결과물이라는 말입니다.
range()는 파이썬의 내장함수인데, 다이나모의 Range 노드와 거의 동일한 기능의 함수 입니다.
다만, 두번째 입력값인 end 값을 받아서 end 값을 넘지 않는 정수를 리스트의 마지막 값으로 돌려줍니다.
그래서 코드에 보면 제가 range함수의 인자에 start, end+1, step 이라고 적어놨죠?
저렇게 해야 파이썬 코드와 다이나모 Range 노드가 항상 동일한 결과를 반환하게 됩니다.
Sequence
Sequence 기능과 동일한 역할을 하는 파이썬 코드는 위와 같습니다.
설명하려면 for 문에 대한 이해가 필요한데, 파이썬 내용을 주제로 하는 포스팅이 아니므로
추후 별도 포스팅으로 파이썬 기본 문법들을 하겠습니다.
지금은 똑같이 한번 쳐보기만 해도 됩니다.
결론
다이나모에서 리스트를 만들어내는 기본 기본노드 3가지를 보고,
동일한 기능을 코드블럭과 파이썬으로 구현해봤습니다.
파이썬으로 구현한 코드는 입력된 인자가 리스트가 아닌 단일 값인 경우에만 정상작동합니다.
나중에 파이썬 입력인자가 단일인지 복수인지에 따라 자동으로 동작하는 파이썬 코드를 보여드리겠습니다.
기본 노드, 코드블럭, 파이썬 스크립트는 결국에는 여러분이 만들어내는 다이나모 프로그램에서
적재적소에 배치되고 하나로 어울리게 될거에요.
사용법을 명확히 알아두시면 좋습니다.
'흔한생각 (recording) > Dynamo' 카테고리의 다른 글
List_Inspect #1 (다이나모 기본노드 활용 시리즈-4) (0) | 2022.03.07 |
---|---|
List_Generate #2 (다이나모 기본노드 활용 시리즈-3) (0) | 2022.02.27 |
Import (다이나모 기본노드 활용 시리즈-1) (2) | 2022.02.24 |
Dynamo 기본노드로 필터링 VS 파이썬으로 필터링 (0) | 2022.02.20 |
다이나모 코드의 추상화 수준을 높여가는 방법 (0) | 2022.02.17 |