
첫 번째 패치 만들기 - Object, Message, Bang
Max 오브젝트의 개념과 생성 방법, Message와 Bang을 활용한 첫 패치를 만들어봅니다.
이 에피소드에서 배우는 것
- Max 오브젝트의 개념과 생성 방법
- Message와 Comment의 역할
- Bang의 개념과 동작 원리
- Print를 활용한 디버깅
사전 지식
- EP01: Max/MSP란 무엇인가
오브젝트란?

Max에서 오브젝트(Object)는 특정한 동작을 실행하는 하나의 알고리즘이다. 더하기를 하는 오브젝트, 소리를 재생하는 오브젝트, 타이머 역할을 하는 오브젝트 등 각각이 하나의 기능을 담당한다. Max 프로그램은 이런 오브젝트들을 여러 개 조합하여 전체적인 결과를 만들어내는 구조이다.
오브젝트를 생성하려면 Patcher Window에서 n 키를 누른다. 텍스트 입력창이 나타나면 원하는 오브젝트의 이름을 입력하면 된다. 이름의 일부만 입력해도 자동완성 목록이 표시되므로, 전체 이름을 정확히 외울 필요는 없다.
오브젝트에는 입력(Inlet)과 출력(Outlet)이 있다. Inlet은 오브젝트 상단에, Outlet은 하단에 위치한다. 오브젝트 간에 선(Patch Cord)을 연결하여 데이터가 흘러가는 경로를 만든다.
Max에서 사용하는 오브젝트는 크게 세 종류로 나뉜다.
- Max Object: 기본적인 데이터 처리를 담당한다. 숫자 연산, 논리 판단, 타이밍 제어 등을 수행한다.
- MSP Object: 이름에
~(틸드)가 붙어있다. 오디오 신호를 처리하며, DSP가 활성화되어 있을 때 상시 작동한다. - Jitter Object: 이름이
jit.으로 시작한다. 비디오와 행렬 데이터를 처리한다.
Message
Message 박스는 Max에서 데이터를 저장하거나 명령어를 전달하는 용도로 사용된다. 겉보기에는 단순한 텍스트 상자처럼 보이지만, Max에서 가장 자주 사용되는 구성 요소 중 하나이다.
Message 박스 안에 $1을 넣으면, 외부에서 입력받는 데이터를 포함한 메시지를 만들 수 있다. $ 뒤의 숫자는 리스트에서 몇 번째 요소를 참조할지를 지정한다. 예를 들어 frequency is $1 Hz라는 메시지에 숫자 440을 보내면 frequency is 440 Hz가 출력된다.
Comment
Comment는 패치에 메모를 남기기 위한 오브젝트이다. 프로그램의 동작에는 아무런 영향을 미치지 않지만, 중요도는 매우 높다. 자신이 만든 패치를 나중에 다시 열었을 때, 또는 다른 사람이 패치를 볼 때, Comment가 없으면 프로그램의 흐름을 파악하기가 매우 어렵다.
패치의 각 파트에 설명을 붙이고, 전체 흐름을 순서도처럼 정리하는 습관을 들이자. 코드에서 주석이 중요하듯, Max에서는 Comment가 그 역할을 한다.

Bang - Max의 심장박동
Bang은 Max 프로그램 안에서만 사용되는 특별한 신호이다. 실제 데이터 값을 가지고 있지 않지만, 오브젝트에게 “지금 네 기능을 실행하라”는 명령을 전달한다. 전등의 스위치를 누르는 것과 비슷하다고 생각하면 된다.
Max에서 어떤 연산을 실행하려면 세 가지가 필요하다.
- 연산에 필요한 데이터 (숫자, 문자 등)
- 연산을 수행할 오브젝트 (더하기, 곱하기 등)
- 연산을 트리거할 bang
예를 들어 1 + 1을 계산하려면, [+ ] 오브젝트에 숫자 1과 1을 입력한 다음, bang을 보내야 비로소 결과가 나온다.
중요한 점은, 많은 오브젝트들이 결과를 출력할 때 데이터와 함께 bang도 함께 내보낸다는 것이다. 이 덕분에 오브젝트들을 연쇄적으로 연결하면 하나의 bang이 전체 프로그램을 순차적으로 작동시킬 수 있다.
Print - 디버깅의 시작
[print] 오브젝트는 입력받는 데이터의 값을 Max Console에 표시해준다. 프로그래밍에서 console.log()나 print()와 같은 역할이다.
[print myValue]처럼 이름을 지정하면 출력 시 해당 이름이 함께 표시되어, 여러 곳에서 동시에 디버깅할 때 어떤 print에서 나온 값인지 쉽게 구별할 수 있다.
@popup 속성을 추가하면 Console이 아닌 패치 화면 위에 직접 값을 표시할 수도 있다.
GUI (Graphic User Interface)
GUI 오브젝트는 패치 안에서 데이터의 크기나 상태를 시각적으로 표현하고, 마우스로 직접 값을 조작할 수 있게 해준다. 대표적인 GUI 오브젝트로는 다음이 있다.
[dial]: 회전형 노브[slider]: 슬라이더[multislider]: 여러 개의 슬라이더를 한꺼번에 표시[gain~]: 오디오 볼륨 조절 (MSP 신호용)[meter~]: 오디오 레벨 미터 (MSP 신호용)
이런 GUI 오브젝트들을 활용하면 단순한 프로그램을 넘어, 사용자가 직접 조작할 수 있는 인터페이스를 만들 수 있다.
핵심 오브젝트 정리
| 오브젝트 | 단축키/사용법 | 역할 |
|---|---|---|
| Object | n | 기능 수행 알고리즘 |
| Message | m | 데이터 저장 및 명령 전달 |
| Comment | c | 메모/주석 |
| Bang | b | 실행 트리거 |
[print] | - | Console에 값 출력 |
직접 해보기
- 빈 패치에
[print hello]오브젝트를 만들어보자 - Bang 버튼을 만들어 print에 연결하고 클릭해보자
- Message 박스에 “Max is fun”을 입력하고 print로 보내보자
다음 에피소드 예고
다음 에피소드에서는 드디어 소리를 낸다. cycle~ 오브젝트로 사인파를 생성하고, gain~과 ezdac~를 연결하여 스피커로 출력하는 방법을 배운다.
자주 묻는 질문
Max에서 Bang이란 정확히 무엇인가요?
Bang은 Max 안에서만 사용되는 특별한 신호로, 실제 데이터 값을 가지지 않고 "지금 네 기능을 실행하라"는 명령만 전달합니다. 전등 스위치를 누르는 것과 같다고 생각하면 됩니다. Max에서 어떤 연산을 실행하려면 데이터·오브젝트·Bang 세 가지가 모두 필요하며, 많은 오브젝트는 결과를 출력할 때 데이터와 함께 Bang도 자동으로 내보내기 때문에 오브젝트들을 연쇄적으로 트리거할 수 있습니다.
오브젝트(Object), 메시지(Message), 코멘트(Comment)의 차이는 무엇인가요?
Object는 실제로 동작을 수행하는 알고리즘 단위로, 'n' 키로 만들고 이름(예: +, metro, cycle~)을 입력해 기능을 지정합니다. Message는 데이터나 명령어를 저장·전달하는 박스로, 'm' 키로 생성하고 클릭하면 안의 내용을 다음 오브젝트로 보냅니다. Comment는 'c' 키로 만드는 메모이며 프로그램 동작에는 영향을 주지 않지만 패치를 다시 열었을 때 흐름을 파악하는 데 매우 중요합니다.
MSP 오브젝트와 일반 Max 오브젝트는 어떻게 구분하나요?
이름 끝의 틸드(~) 기호로 구분합니다. cycle~, gain~, ezdac~처럼 ~가 붙은 오브젝트는 MSP 오브젝트로 오디오 신호를 처리하며, DSP가 켜져 있는 동안 매 샘플마다 끊임없이 동작합니다. 틸드가 없는 일반 Max 오브젝트는 이벤트가 발생할 때만 동작하는 컨트롤 레이트 데이터(숫자·메시지·Bang)를 처리합니다. Jitter 오브젝트는 jit. 접두사로 시작하며 비디오와 행렬 데이터를 다룹니다.
패치를 만들었는데 동작하지 않으면 어떻게 디버깅하나요?
[print] 오브젝트가 가장 기본적인 디버깅 도구입니다. 의심되는 지점에 [print 이름]을 연결하면 Max Console에 해당 위치를 흐르는 값이 표시됩니다. [print myValue]처럼 라벨을 붙이면 여러 print를 동시에 사용해도 어디서 나온 값인지 구별할 수 있고, [print @popup 1] 속성을 추가하면 Console 대신 패치 화면 위에 직접 값을 띄울 수도 있습니다.
이 에피소드가 도움이 됐다면 눌러주세요.
실습 패치 다운로드
Max 8 이상에서 열어주세요. 파일을 Max로 드래그하거나 더블클릭하면 실행됩니다.
공식 문서 참조
YouTube
채널에서 더 많은 Max/MSP 예제를 이어서 보세요
튜토리얼의 흐름을 끊지 않고, 실제 영상 데모와 채널 콘텐츠를 연속해서 확인할 수 있습니다.