메뉴 건너뛰기

A11Y

손으로 하모니카나 머리빗을 만져보면, 여러 개의 구멍이나 빗살이 일정한 간격으로 쭉 늘어서 있죠. 또는 건물의 계단을 오를 때, 발을 딛는 계단들이 같은 모양으로 계속 이어지는 것을 느낄 수 있습니다.

만약 우리가 이런 모델을 코드로 만든다고 상상해봅시다. 하모니카에 구멍 10개를 뚫어야 한다면, 구멍을 만드는 코드를 열 번이나 복사해서 붙여넣어야 할까요? 계단을 20칸 만들어야 한다면 스무 번이나요? 생각만 해도 번거롭고 비효율적입니다.

바로 이럴 때 사용하는 마법 같은 명령이 for 입니다. for는 "이 작업을 정해진 횟수만큼, 혹은 이 규칙에 따라 반복해줘"라고 컴퓨터에게 지시하는 명령어입니다. 단 몇 줄의 코드로 수십, 수백 개의 반복되는 형태를 순식간에 만들어낼 수 있죠.

for 반복문의 기본 사용법

for는 괄호 () 안에 반복에 대한 규칙을 정해주고, 중괄호 {} 안에 반복할 명령을 넣어줍니다. 규칙은 크게 세 가지 방식으로 정할 수 있습니다.

  1. 시작부터 끝까지 1씩 증가하며 반복

    for(변수 = [시작값 : 끝값]) { ... }
    예를 들어, for(i = [1 : 3]) 라고 쓰면, i라는 임시 변수가 처음엔 1이 되었다가, 다음엔 2, 마지막으로 3이 되면서 중괄호 안의 명령을 총 세 번 실행합니다.

  2. 정해진 증가율로 반복

    for(변수 = [시작값 : 증가율 : 끝값]) { ... }
    만약 1부터 3까지 0.5씩 증가시키고 싶다면 어떨까요? for(i = [1 : 0.5 : 3]) 라고 쓰면, i는 1, 1.5, 2, 2.5, 3으로 변하면서 총 다섯 번 반복합니다.

  3. 정해진 값들만 콕 집어서 반복

    for(변수 = [값1, 값2, 값3, ...]) { ... }
    규칙적이지 않은 값들로 반복하고 싶을 때 사용합니다. for(i = [1, 3, 4, 6]) 이라고 쓰면, i는 1, 3, 4, 6 순서로 변하면서 네 번 반복합니다.

실습: for를 이용해 하모니카 만들기

자, 그럼 이 for 명령어를 활용해서 간단한 하모니카 모양을 함께 만들어 보겠습니다.

코드의 시작 <<<


// 하모니카 전체 크기
harmonica_width = 100; // 좌우 너비 (mm)
harmonica_height = 25; // 위아래 높이 (mm)
harmonica_depth = 20;  // 앞뒤 깊이 (두께) (mm)

// 구멍 속성
num_holes = 10;         // 구멍은 총 10개를 뚫을 겁니다.
hole_height = 10;       // 각 구멍의 높이는 10mm입니다.
wall_thickness = 3;     // 구멍과 구멍 사이, 그리고 양쪽 끝의 벽 두께는 3mm입니다.

// =================================
//        2단계: 모델 실제로 만들기
// =================================

// 먼저, 구멍 하나의 너비를 자동으로 계산해 봅시다.
// 전체 너비에서, 모든 벽의 두께를 뺀 공간이 순수하게 구멍들이 차지할 공간입니다.
// 벽은 구멍 10개 사이에 9개, 그리고 양 끝에 2개, 총 11개가 있습니다. (num_holes + 1)
// 이렇게 남은 공간을 구멍의 개수(num_holes)로 나누면 구멍 하나의 너비가 나옵니다.
hole_width = (harmonica_width - (num_holes + 1) * wall_thickness) / num_holes;

// 이제 '차집합'을 의미하는 difference() 함수를 사용해 몸체에서 구멍들을 빼내겠습니다.
// 마치 찰흙 덩어리에서 도구로 흙을 파내는 것과 같습니다.
difference() {
    
    // 첫 번째 객체: 기본 몸체 (찰흙 덩어리)
    // 먼저, 꽉 찬 직육면체 모양의 하모니카 몸통을 만듭니다.
    // center=true 옵션은 모델의 정중앙을 좌표의 원점(0,0,0)에 맞추는 역할입니다.
    cube([harmonica_width, harmonica_height, harmonica_depth], center=true);
    
    // 두 번째 객체 이후: 빼낼 모양들 (흙을 파낼 도구들)
    // 여기에 for 반복문을 사용해서 10개의 구멍을 한 번에 생성하고 빼냅니다.
    // i라는 변수가 0부터 9까지 (총 10번) 반복됩니다.
    for (i = [0 : num_holes - 1]) {
        
        // 각 구멍이 위치할 x축(좌우) 좌표를 계산하는 부분입니다. 여기가 핵심입니다.
        // 첫 번째 구멍의 중심 위치를 계산한 뒤,
        // 그 다음 구멍부터는 (구멍 너비 + 벽 두께)만큼씩 오른쪽으로 이동하며 배치합니다.
        x_pos = -harmonica_width/2 + wall_thickness + hole_width/2 + i * (hole_width + wall_thickness);
        
        // translate는 '이동'을 의미하는 명령입니다.
        // 방금 계산한 x_pos 위치로 구멍 역할을 할 큐브를 이동시킵니다.
        translate([x_pos, 0, 0]) {
            // 몸체를 확실히 관통시키기 위해, 몸체 깊이(depth)보다 살짝 더 긴 큐브를 만듭니다.
            // 마치 송곳이 판자를 뚫고 반대편으로 조금 더 튀어나오는 것과 같습니다.
            cube([hole_width, hole_height, harmonica_depth + 1], center=true);
        }
    }
}
            

>>> 코드의 끝

코드 해설

  1. 설계도 (변수 설정)

    코드 상단에서 하모니카의 너비, 높이, 구멍 개수 등을 변수로 정해두었습니다. 이것은 우리 모델의 '설계도'와 같습니다. 만약 여러분이 구멍이 8개인 하모니카를 만들고 싶다면, num_holes = 10; 이 부분을 num_holes = 8;로 바꾸기만 하면 됩니다. 나머지 너비나 위치는 코드가 알아서 다시 계산해 줄 겁니다. 정말 편리하죠.

  2. difference() 함수

    이 함수는 첫 번째로 등장하는 객체에서, 그 뒤에 오는 모든 객체들의 모양을 빼내는 역할을 합니다. 우리는 커다란 직육면체 몸통(cube)에서, for문이 만들어내는 10개의 길쭉한 직육면체(구멍)들을 빼내어 하모니카 형태를 완성합니다.

  3. for 반복문의 기적

    이 코드의 심장부입니다. 우리는 구멍을 만들기 위한 translatecube 코드를 단 한 번만 작성했습니다. for (i = [0 : 9]) 이 명령이 i의 값을 0부터 9까지 바꿔가며 코드를 열 번 실행시켜 줍니다. 가장 중요한 것은 x_pos 계산식입니다. i가 0일 때는 첫 번째 구멍의 위치가, 1일 때는 두 번째 구멍의 위치가 계산되어, 10개의 구멍이 정확한 간격으로 나란히 배치되는 것입니다.

정리

오늘 우리는 for 반복문을 사용해 반복적인 작업을 얼마나 효율적으로 처리할 수 있는지 배웠습니다. 손으로 열 번 써야 할 코드를 단 한 번만 작성하고, 컴퓨터가 나머지를 처리하도록 만들었죠.

직접 코드의 변수 값을 바꿔보면서 모델이 어떻게 변하는지 상상해 보세요.

  • num_holes를 5로 줄여보면 어떨까요?
  • wall_thickness를 5로 늘리면 구멍 사이의 간격이 더 넓어지겠죠?

이처럼 for 반복문은 규칙을 가진 모든 형태를 만드는 데 매우 유용합니다. 앞으로 계단, 격자무늬, 톱니바퀴 등 더 복잡한 모델을 만들 때 이 for 명령어를 계속해서 사용하게 될 겁니다.

번호 제목 날짜 조회 수
23 [참고] OpenSCAD Nightly 에서 사용되는 명령어 일람 - A.I 작성 2026.04.07 9
22 OpenSCAD#12. 시각장애인도 3D 디자인을 - 2D 평면을 3D 입체로 만드는 마법 - 사출(extrusion)의 이해 2026.04.07 4
21 [자료] OpenSCAD로 만든 남성과 여성 피규어 모델 file 2026.04.03 17
20 OpenSCAD#11. 시각장애인도 3D 디자인을 - 부품 단위로 생각하기, module 2026.04.03 20
» OpenSCAD#10. 시각장애인도 3D 디자인을 - 반복의 마법, for 2026.04.01 31
18 OpenSCAD#9. 시각장애인도 3D 디자인을 - 모서리가 둥근 큐브 만들기 2026.03.31 26
17 OpenSCAD#8. 시각장애인도 3D 디자인을 - scale, 빵 만들기 2026.03.27 128
16 OpenSCAD#7. 시각장애인도 3D 디자인을 - 곡면의 이해 - 품질과 성능 2026.03.26 119
15 OpenSCAD#6. 시각장애인도 3D 디자인을 - 맥미니에 구멍 뚫기 2026.03.24 130
14 OpenSCAD#5. 시각장애인도 3D 디자인을 - 맥미니(Mac mini) 만들기 2026.03.23 201
13 OpenSCAD#4. 시각장애인도 3D 디자인을 - 미키마우스 머리 만들기 2026.03.20 151
12 [수정] OpenSCAD#3. 시각장애인도 3D 디자인을 - 공간의 이해 - 좌표, 단위, 회전 2026.03.19 206
11 OpenSCAD#2. 시각장애인도 3D 디자인을 - 설치와 실행 2026.03.18 185
10 OpenSCAD#1. 시각장애인도 3D 디자인을 - 소개편 2026.03.17 149
9 시각장애 개발자와 함께하는 아이디어 마이닝 #9. 마치며 2024.11.22 1089
8 시각장애 개발자와 함께하는 아이디어 마이닝 #8. 자바스크립트 2024.11.21 924
7 시각장애 개발자와 함께하는 아이디어 마이닝 #7. 스크립트 예시, CMD 2024.11.20 849
6 시각장애 개발자와 함께하는 아이디어 마이닝 #6. 스크립트 언어 2024.11.19 910
5 시각장애 개발자와 함께하는 아이디어 마이닝 #5. HTML 2024.11.18 905
4 시각장애 개발자와 함께하는 아이디어 마이닝 #4. 의사 코드 2024.11.14 774