메뉴 건너뛰기

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 명령어를 계속해서 사용하게 될 겁니다.

번호 제목 날짜 조회 수
» OpenSCAD#10. 시각장애인도 3D 디자인을 - 반복의 마법, for update 2026.04.01 10
36 OpenSCAD#9. 시각장애인도 3D 디자인을 - 모서리가 둥근 큐브 만들기 2026.03.31 13
35 OpenSCAD#8. 시각장애인도 3D 디자인을 - scale, 빵 만들기 2026.03.27 36
34 OpenSCAD#7. 시각장애인도 3D 디자인을 - 곡면의 이해 - 품질과 성능 2026.03.26 50
33 OpenSCAD#6. 시각장애인도 3D 디자인을 - 맥미니에 구멍 뚫기 2026.03.24 55
32 OpenSCAD#5. 시각장애인도 3D 디자인을 - 맥미니(Mac mini) 만들기 2026.03.23 71
31 OpenSCAD#4. 시각장애인도 3D 디자인을 - 미키마우스 머리 만들기 2026.03.20 76
30 [수정] OpenSCAD#3. 시각장애인도 3D 디자인을 - 공간의 이해 - 좌표, 단위, 회전 2026.03.19 95
29 OpenSCAD#2. 시각장애인도 3D 디자인을 - 설치와 실행 2026.03.18 100
28 OpenSCAD#1. 시각장애인도 3D 디자인을 - 소개편 2026.03.17 83
27 센스리더 어센드 멀티라인 점자 출력 기능 2026.02.20 179
26 센스리더 가상커서 해제시 포커스 정보에 관하여 2026.02.09 266
25 센스리더 즐겨찾기 도구의 A.I. 프롬프트 사용 안내 2026.02.03 212
24 센스리더 도구에 대한 간략한 소개 2026.01.27 324
23 alt="" 접근성을 더욱 위배할 수 있다. 2025.05.14 826
22 시각장애 개발자와 함께하는 아이디어 마이닝 #9. 마치며 2024.11.22 1028
21 시각장애 개발자와 함께하는 아이디어 마이닝 #8. 자바스크립트 2024.11.21 870
20 시각장애 개발자와 함께하는 아이디어 마이닝 #7. 스크립트 예시, CMD 2024.11.20 791
19 시각장애 개발자와 함께하는 아이디어 마이닝 #6. 스크립트 언어 2024.11.19 837
18 시각장애 개발자와 함께하는 아이디어 마이닝 #5. HTML 2024.11.18 821