유니티 3.x 게임: 기본 정석에서 스크립팅까지 세트
- 원서명Unity 3.x Game Development Essentials
- 지은이이득우, 윌 골드스톤
- 옮긴이조형재
- ISBN : 9788960773134
- 69,000원
- 2012년 06월 18일 펴냄 (절판)
- 페이퍼백 | 1,032쪽 | 188*250mm
- 시리즈 : 게임 개발 프로그래밍
판매처
- 현재 이 도서는 구매할 수 없습니다.
책 소개
[ 세트 구성: 전2권 ]
1) 『유니티 게임 개발의 정석: 인터페이스부터 엔진 기능 활용, 최적화, 배포까지 Unity3D의 모든 것』
2) 『Unity 3.x Game Development Essentials 한국어판: C#과 자바스크립트로 하는 유니티 3.X 게임 개발』
『유니티 게임 개발의 정석』 소개
유니티 공인 에반젤리스트가 저술하고, 유니티 테크놀로지스 코리아에서 추천한 책!
유니티 입문자를 위한 기본 사용법부터, 유니티를 이용해 게임을 개발하기 위한 다양한 기능을 이론과 함께 정리한 유니티 게임 전문 개발 서적이다. 지형, 렌더링, 셰이더, 물리 엔진, 2D 스프라이트, 애니메이션, 사운드, 파티클 효과와 같은 게임 개발에 필수적이고 기본적인 요소뿐만 아니라, 라이트매핑, 포스트 이펙트, 오클루젼 컬링, 최적화, 배포 등과 같은 현업 실무에서도 참고할 수 있는 고급 기능을 다양한 예제와 함께 총망라한 유니티 게임 완벽 바이블이다.
유니티 공인 에반젤리스트이자 Recognized Instructor인 저자가 일반인도 쉽게 이해할 수 있도록 편안한 문체와 다이어그램을 통해 유니티의 모든 기능을 설명했다. 또한 전문적인 게임 개발에 쓰이는 각 컴포넌트의 세부적인 기능을 직접 테스트하고 이에 대한 활용법을 기술했다.
[부록 DVD 수록]
■ 이 책에 실린 C# 기반의 예제 소스코드 수록
■ 자바스크립트 사용자를 위한 자바스크립트 소스코드 수록
■ 유니티코리아(unity3dkorea.com) 제공 자료
- 윈도우용/맥용 유니티 3.5 무료 버전
- 유니티 게임 프로모션 영상
- 캐릭터 애니메이션 기능 프리뷰 영상
『Unity 3.x Game Development Essentials 한국어판』 소개
다년간의 유니티 강의를 거쳐, 현재 유니티 테크놀로지에서 교육 관련 부분을 담당하고 있는 윌 골드스톤의 경험과 지식이 담긴 초보자를 위한 유니티 입문서다. 세계 최초의 유니티 책으로 유명한 『Unity Game Development Essentials』의 개정판으로 3D의 기본 개념, 인터페이스와 스크립팅 입문, 유니티 핵심 기능과 스크립팅 활용을 통한 실제 게임 메카닉 구현, 최적화와 게임 빌드를 통한 배포까지의 내용을 실제 개발 예제를 통해 자세히 설명한다.
게임 엔진은 우리가 익히 알고, 즐기는 게임들의 이면에서 그 게임을 돌아가게 만드는 도구다. 유니티는 가장 널리 사용되고, 사랑 받는 게임 개발 엔진이다. 게임뿐 아니라 웹, 데스크톱, 모바일, 콘솔에서의 인터랙티브한 경험을 만들기 위해 취미 개발자에서부터 대형 스튜디오에 이르기까지, 다양한 사람들이 유니티를 사용한다. 유니티가 제공하는 직관적이고 사용하기 쉬운 기능과 이 책을 통해, 이전과는 비교할 수 없을 정도로 손쉽게 게임 개발을 시작할 수 있다.
실질적인 접근을 취하는 이 책은 유니티를 이용한 개발에 들어가기 전에, 먼저 3D 게임 개발의 주요 개념을 소개한다. 그 다음 간단한 게임 디자인의 프로토타입을 거쳐, 본격적으로 더 큰 규모의 게임 개발로 들어간다. 이 과정에서 3D 월드 제작, 스크립팅, 게임 메카닉 구현과 같이 게임 개발의 필수 요소를 다룬다.
[부록 CD 수록] 유니티코리아 제공
■ 윈도우용 유니티 3.5.1 무료 버전
■ 유니티 프로모션 영상
목차
목차
- 『유니티 게임 개발의 정석』
- 1장 유니티 소개
- 1.1 유니티 3D 역사
- 1.2 기능 둘러보기
- 통합 인터페이스
- 멀티 플랫폼 지원
- 통합 에셋 시스템
- 현실감 있는 렌더링 시스템
- 셰이더 시스템
- 지형 생성 기능
- 오디오 기능
- 애니메이션 기능
- 파티클 시스템
- 물리 엔진 기능
- 프로그래밍 기능
- 2D 게임 제작
- 최적화를 위한 기능
- 1.3 유니티 3.5 버전 기능
- 플래시 플랫폼 지원
- 실시간 렌더링을 위한 핵심 기능 추가
- 실시간 렌더링의 최적화
- 자동 길 찾기 시스템
- 새로운 파티클 이펙트 시스템
- 기타 추가 기능 리스트
- 1.4 설치
- 1.5 간단한 실습
- 1.6 시작하기
- 1.7 정리
- 2장 유니티 인터페이스
- 2.1 인터페이스 개요
- 뷰 레이아웃
- 물체의 생성
- 빛의 추가
- 뷰와 관련된 기타 기능
- 2.2 씬 뷰
- 씬 뷰의 조작
- 씬 기즈모
- 트랜스폼 툴
- 2.3 계층 뷰
- 2.4 프로젝트 뷰
- 2.5 인스펙터 뷰
- 2.6 게임 뷰
- 2.7 스내핑
- 스냅 기능
- 정점 스냅 기능
- 뷰로 이동 기능
- 2.8 프로젝트 구조
- 씬
- 에셋
- 디렉토리 구조
- 2.9 패키지
- 패키지 불러오기
- 패키지 내보내기
- 유니티 기본 패키지
- 2.10 프리팹
- 프리팹 예제 실습
- 프리팹에 연결된 게임 오브젝트
- 2.11 정리
- 2.1 인터페이스 개요
- 3장 지형 시스템
- 3.1 지형 시스템의 이해
- 3.2 높낮이 설정
- 3.3 텍스처 설정
- 3.4 나무 배치
- 3.5 풀밭 조성
- 3.6 기타 설정
- Base Terrain 설정
- Tree & Detail Object 설정
- Wind 설정
- 3.7 불러들이기/내보내기
- 3.8 환경 컴포넌트
- 안개
- 스카이박스
- 물 패키지
- 플레어/ 헤일로 효과
- 프로젝터
- 3.9 1인칭 컨트롤러 사용
- 1인칭 컨트롤러의 동작원리
- 3.10 3인칭 컨트롤러 사용
- 3인칭 컨트롤러의 동작원리
- 3.11 정리
- 4장 렌더링 시스템
- 4.1 렌더링 프로세스
- 4.2 메쉬
- 4.3 모델링 불러오기
- 정점 데이터의 증가
- 유니티 권장 에셋 형식
- 유니티 3차원 좌표계
- 유니티 스케일
- 유니티를 위한 노멀 구성
- 4.4 재질
- 셰이더 제작
- 셰이더 속성
- 4.5 텍스처
- 텍스처 불러오기
- 텍스처 조정
- UV 좌표계
- 큐브맵 텍스처
- 렌더 텍스처
- 절차적 텍스처
- 4.6 물체의 렌더링
- 4.7 카메라
- 4.8 라이트
- 4.9 그림자
- 4.10 정리
- 5장 셰이더
- 5.1 유니티 셰이더 시스템
- 셰이더
- 5.2 유니티 내장 셰이더
- 내장 셰이더 규칙
- 내장 셰이더 사용
- 디퓨즈 셰이더
- 스페큘러 셰이더
- 범프드 셰이더
- 트랜스패런트 셰이더
- 트랜스패런트 컷아웃 셰이더
- 셀프일루민 셰이더
- 리플렉티브 셰이더
- 버텍스릿 셰이더
- 언릿 셰이더
- 디캘 셰이더
- 5.3 SSE 사용
- SSE 설치
- SSE 시스템 구성
- SSE 사용법
- 픽셀 그래프 마스터 노드
- 셰이더 제작
- 5.4 SSE 활용
- 범프드 기능 추가
- 하이라이트 기능 추가
- 셀프일루민 기능 추가
- 리플렉티브 기능 추가
- 디캘 기능 추가
- 림라이팅 기능 추가
- 5.5 셰이더랩
- 서브셰이더
- 태그
- 패스
- 유니티 셰이더 프로그램
- 고정 함수 프로그램 예제 분석
- 5.6 정리
- 5.1 유니티 셰이더 시스템
- 6장 물리 시스템
- 6.1 물리 엔진의 구성요소
- 6.2 리지드바디
- 6.3 충돌체
- 메쉬 충돌체
- 6.4 물리 재질
- 6.5 간단한 시뮬레이션
- 6.6 자동차 시뮬레이션
- 6.7 조인트
- 힌지 조인트
- 고정 조인트
- 스프링 조인트
- 캐릭터 조인트
- 설정 조인트
- 6.8 기타 구성요소
- 랙돌
- 천
- 환경설정
- 6.9 정리
- 7장 프로그래밍
- 7.1 프로그래밍 시스템
- 프레임 함수
- 이벤트 함수
- 콘솔 뷰
- 개발 환경 설정
- 7.2 스프라이트 컴포넌트
- 7.3 씬 설정
- 7.4 입력 프로그래밍
- 7.5 물리 프로그래밍
- 7.6 최종 프로그램 제작
- 7.7 정리
- 7.1 프로그래밍 시스템
- 8장 애니메이션
- 8.1 2D 애니메이션
- 8.2 애니메이션 이징
- 8.3 유니티 애니메이션 시스템
- 8.4 스키닝 애니메이션
- 8.5 애니메이션 결합
- 8.6 FBX로 애니메이션 불러오기
- 8.7 정리
- 9장 이펙트
- 9.1 라이트매핑
- 라이트매핑 인터페이스
- 게임 오브젝트 설정
- 라이트매핑 설정
- 라이트매핑 제작과 보정
- 듀얼 라이트매핑
- 9.2 포스트 이펙트
- 안티엘리어싱
- 블룸
- 피사계심도
- 경계선 탐지
- 모션 블러
- SSAO
- Sun Shaft 효과
- 9.3 파티클 이펙트
- 파티클 이미터
- 파티클 애니메이터
- 파티클 렌더러
- 파티클 충돌체
- 9.4 사운드 이펙트
- 유니티 사운드 구성요소
- 오디오 임포터
- 사운드 효과
- 9.5 정리
- 9.1 라이트매핑
- 10장 최적화
- 10.1 게임 프로세스
- 10.2 프로파일러
- CPU 사용량 영역
- GPU 사용량 영역
- 렌더링 영역
- 메모리 영역
- 오디오 영역
- 물리 영역
- 내장 프로파일러
- 원격 접속 프로파일링
- 10.3 컬링
- 프러스텀 컬링
- 레이어별 차단 거리 설정
- 오클루전 컬링
- 오클루전 영역 설정
- 오클루전 컬링 데이터 제작
- 최종 결과 시뮬레이션
- 10.4 드로우콜
- 텍스처 아틀라스
- 10.5 배칭
- 10.6 에셋 최적화
- 텍스처 이미지
- 오버드로우
- 10.7 물리 엔진 최적화
- 물리 엔진을 꼭 사용해야 하는가?
- FixedUpdate 함수 사용
- 충돌체 설정
- 충돌체의 이동
- Maximum Allowed Timestep 조절
- Solver Iteration Count 조절
- Sleep 조절
- 10.8 프로그래밍 최적화
- 자바스크립트와 C#
- 유니티 라이브러리 사용 시 주의사항
- 프리팹 생성
- 코루틴
- 박싱/언박싱
- 배열 관리
- 반복 시에 유용한 프로그래밍 팁
- 10.9 정리
- 11장 배포
- 11.1 빌드 시스템
- 플랫폼 변경
- 빌드 설정
- 프로그램 제작
- 11.2 윈도우/맥 배포
- 11.3 웹 배포
- 스트리밍 기능
- 보안 샌드박스
- 웹 브라우저와의 연동
- 11.4 iOS 배포
- 최종 프로그램 크기
- 11.5 안드로이드 배포
- 안드로이드 개발 준비
- 빌드 설정
- 안드로이드 확장 개발
- 11.6 정리
- 11.1 빌드 시스템
- 『Unity 3.x Game Development Essentials 한국어판』
- 1장 3D 세계로의 입문
- 3D에 대한 기본적 이해
- 좌표계
- 로컬 공간과 월드 공간
- 벡터
- 카메라
- 프로젝션 모드: 3D 대 2D
- 폴리곤, 에지, 버텍스, 메쉬
- 재질, 텍스처, 셰이더
- 리지드바디 다이나믹스
- 충돌 감지
- 유니티의 주요 개념
- 유니티적 방식
- 애셋
- 씬
- 게임오브젝트
- 컴포넌트
- 스크립트
- 프리팹
- 인터페이스
- 씬 뷰와 계층 패널
- 컨트롤 도구
- 비행모드
- 컨트롤 바
- 검색 상자
- Create 버튼
- 인스펙터
- 프로젝트 패널
- 게임 뷰
- 씬 뷰와 계층 패널
- 요약
- 3D에 대한 기본적 이해
- 2장 프로토타이핑과 기본 스크립팅
- 첫 유니티 프로젝트
- 기본 프로토타이핑 환경
- 씬 세팅
- 라이팅 추가
- 벽 만들기
- 원본 벽돌 만들기
- 스냅 기능
- 빈 게임오브젝트를 이용한 그룹과 복사
- 벽돌 벽과 게임 메카닉
- 시점 설정
- 스크립팅
- behavior 스크립트 또는 class
- C# 스크립트의 구조
- 기본 함수
- C#에서의 변수
- 자바스크립트의 구조
- 자바스크립트에서의 변수
- 주석
- 공격
- 퍼블릭 변수 선언
- 스크립트 지정
- 카메라 이동
- 지역, 프라이빗, 퍼블릭 변수
- Translate 의 이해
- Translate 적용
- 게임 테스트
- 발사체 제작
- 발사체 프리팹 제작
- 재질의 생성과 적용
- 물리와 리지드바디 적용
- 발사체 제작
- 프리팹으로 저장하기
- 발사체 발사
- Instantiate()를 이용한 오브젝트 생성
- 리지드바디에 힘 추가
- 요약
- 3장 배경 제작
- 게임 디자인
- 지형 편집기
- Terrain 메뉴
- 하이트맵 불러오기와 내보내기
- Set Resolution
- Mass place trees
- Flatten Heightmap
- Refresh tree and detail prototypes
- 지형 도구
- Terrain (Script)
- Raise height
- Paint height
- Smooth Height
- Paint Texture
- Place Trees
- Paint Details
- Terrain Settings
- 지형 제작: 태양, 바다, 모래
- 단계 1: 지형 설정
- 단계 2: 섬 형태 잡기
- 단계 3: 화산
- 단계 4: 텍스처 적용
- 단계 5: 나무
- 단계 6: 잔디
- 단계 7: 라이팅
- 단계 8: 사운드
- 단계 9: 스카이박스
- 단계 10: 바다
- 단계 11: 탐색
- 단계 12: 수정
- Terrain 메뉴
- 요약
- 4장 플레이어 캐릭터와 스크립팅
- 인스펙터를 이용한 작업
- 태그
- 레이어
- 프리팹과 인스펙터
- 캐릭터의 구조
- First Person Controller 오브젝트 분석
- 부모 자식 관계의 문제
- First Person Controller 오브젝트
- 오브젝트 1 : First Person Controller (부모)
- 오브젝트 2: Graphics (자식)
- 오브젝트 3: Main Camera(자식)
- 스크립팅 심화
- 커맨드
- 변수
- 변수 데이터 타입
- 변수 사용
- 예제
- 함수
- Update()
- OnMouseDown()
- 커스텀 함수 작성
- 반환 타입
- 인자
- 커스텀 함수 선언
- 커스텀 함수 호출
- If else 선언문
- 다중 조건
- For 루프
- 함수
- 스크립트 간의 호출과 닷 문법
- 다른 오브젝트 접근
- Find()와 FindWithTag()
- SendMessage
- GetComponent
- 모바일 프로그래밍
- 닷 문법
- 주석
- 추가 자료
- 캐릭터 이동을 위한 스크립팅
- 스크립트 분석
- 전체 스크립트(자바스크립트)
- 변수 선언
- 이동 정보 저장
- 캐릭터 이동
- 지면과의 접촉 확인
- @script 커맨드
- 스크립트 분석
- 요약
- 인스펙터를 이용한 작업
- 5장 상호작용
- 외부 모델링 패키지
- 모델 불러오기 설정
- 메쉬
- 노멀과 탄젠트
- 재질
- 애니메이션
- 애니메이션 압축
- 초소 모델 설정
- 초소 모델 추가
- 위치
- 회전
- 충돌체 추가
- 리지드바디 추가
- 오디오 추가
- 자동 애니메이션 비활성화
- 충돌과 트리거
- 레이캐스팅
- 프레임 간의 계산 문제
- 충돌 예측
- 초소 문 열기
- 접근 1: 충돌 감지
- 새로운 애셋 제작
- 캐릭터 충돌 감지 스크립팅
- 접근 2: 레이캐스팅
- 주석 처리를 통한 충돌 감지 비활성화
- 코드 이동: DoorManager 스크립트
- PlayerCollisions 스크립트 정리
- 가상선 그리기
- 충돌체 초기화
- 접근 3: 트리거 충돌체 감지
- 트리거 영역의 생성과 조정
- 트리거 충돌체 스크립팅
- 접근 1: 충돌 감지
- 요약
- 외부 모델링 패키지
- 6장 수집, 인벤토리, HUD
- 전지 프리팹 제작
- 내려받기, 불러오기, 배치
- 전지 태그 작업
- 충돌체의 크기와 회전
- 전지 확대
- 트리거 충돌체 추가
- 충돌체 크기
- 리지드바디 추가
- 전지 스크립트
- 회전 효과
- 트리거 충돌체 감지 추가
- 전지 배치
- 플레이어 인벤토리 스크립트
- 충전 값 저장
- 변수 초기 값 설정
- 오디오 피드백
- CellPickup() 함수 추가
- 플레이어에 인벤토리 추가
- 충전 값 저장
- 초소 접근 제한
- 전지 개수를 이용한 접근 제한
- 전지 HUD
- GUItexture 불러오기 설정
- GUITexture 오브젝트 생성
- PowerGUI 텍스처 배치
- 텍스처 교체 스크립팅
- 배열의 이해
- HUD 배열 추가
- HUD 배열에 텍스처 지정
- HUD 비활성화
- HUD의 런타임 활성화
- 발전기 추가
- 문 잠금 상태 표시
- 라이트 추가
- 라이트 색상 변경과 HUD 제거
- 플레이어를 위한 단서
- GUIText를 이용한 텍스트
- GUIText 스크립팅
- 진행 상황을 보여주는 단서
- 폰트의 사용
- GUIText를 이용한 텍스트
- 요약
- 전지 프리팹 제작
- 7장 인스턴스 생성과 리지드바디
- 인스턴스 생성의 활용
- 리지드바디
- 포스
- 리지드바디 컴포넌트
- 미니 게임 제작
- 코코넛 프리팹
- 코코넛 텍스처
- 물리 효과 적용
- 프리팹으로 저장
- 발사 지점
- 코코넛 발사 스크립트
- 입력 확인
- 피드백 사운드 재생
- 코코넛 인스턴스 생성
- 인스턴스 이름 짓기
- 속도 지정
- 개발 안전장치
- 최종 점검
- 인스턴스 생성의 제한과 오브젝트 정리
- 코코넛 던지기 활성화
- 코코넛 던지기 훈련장
- 불러오기 설정
- 코코넛 제거
- 배치
- 자동 애니메이션 비활성화
- 움직이는 부분에 리지드바디 추가
- 코코넛 충돌 감지 스크립트
- 스크립트 지정
- 추가 표적 배치
- 승리 조건
- 변수 선언
- 승리 조건 확인
- 스크립트 지정.
- 적중된 표적 개수 관리
- 마무리
- 크로스헤어 추가
- 메시지 전달
- 코코넛 프리팹
- 요약
- 8장 파티클 시스템
- 파티클 시스템
- 파티클 이미터
- 파티클 애니메이터
- 파티클 렌더러
- 퀘스트 제작
- 관련 애셋
- 모닥불 모델 추가
- 모닥불 파티클 시스템
- 불 효과
- 타원형 파티클 이미터 설정
- 연기 효과
- 음향 효과 추가
- 모닥불 지피기
- 성냥 추가
- 성냥 GUI
- 성냥 수집
- 모닥불 지피기
- 테스트
- 문제점
- 추가 조건을 통한 안전 장치
- 문제점
- 요약
- 파티클 시스템
- 9장 메뉴 디자인
- 인터페이스와 메뉴
- 씬 생성
- 섬 복사
- GUI를 위한 텍스처 설정
- 게임 타이틀 추가
- 씬 생성
- GUITexture와 마우스 이벤트를 이용한 메뉴 제작
- 시작 버튼 추가
- GUITexture 버튼 스크립트
- 씬 불러오기
- 퍼블릭 변수 지정
- 버튼 테스트
- 안내 버튼 추가
- 나가기 버튼 추가
- Debug 커맨드
- Unity GUI 클래스와 GUI 스킨을 이용한 메뉴 제작
- 게임오브젝트 비활성화
- 메뉴 제작
- 퍼블릭 변수 선언
- OnGUI() 함수
- GUI 요소 배치
- GUI 스킨을 이용한 스타일링
- GUI 버튼 배경
- GUI 버튼의 폰트 크기
- 버튼 기능 스크립팅
- 안내 페이지 추가
- 요약
- 인터페이스와 메뉴
- 10장 애니메이션의 기초
- 승리 시퀀스
- 승리 시퀀스 제작 방식
- 승리
- 승리 메시지 제작
- GUI 요소 배치
- GUITexture 그룹화
- Lerp를 이용한 애니메이션
- 애니메이션 수정
- 승리 시퀀스 저장
- Win 오브젝트 생성
- 페이더와 애니메이션 창
- 다양한 해상도에 따른 크기 변경
- 페이더 애니메이션
- 애니메이션 패널
- 애니메이션 클립 생성
- 키프레임 만들기
- 애니메이션 커브
- 애니메이션 이벤트 추가
- 로딩 GUI
- 애니메이션 이벤트로 씬 불러오기
- 로딩 GUI의 저장과 인스턴스 생성
- 승리 시퀀스 불러오기
- GUITexture 레이어링
- 도전 과제: 페이드 인
- 요약
- 승리 시퀀스
- 11장 최적화와 최종 다듬기
- 지형 다듬기와 플레이어 위치
- 지형 다듬기
- 나무 배치
- 언덕, 골짜기, 텍스처 블랜딩
- 해변
- 길
- 지형 다듬기
- 플레이어 배치
- 최적화
- 카메라 클리핑 플레인과 안개
- 라이트매핑
- 섬의 라이트매핑
- 라이트매핑 준비
- 라이트맵 굽기
- 동적 오브젝트 복구
- 최종 다듬기
- 화산!
- 파티클 시스템 배치
- 연기 재질
- 파티클 시스템 설정
- 음향 효과 추가
- 화산 테스트
- 코코넛 트레일
- 프리팹 편집
- 트레일 렌러더 컴포넌트
- 프리팹 업데이트
- 화산!
- 요약
- 지형 다듬기와 플레이어 위치
- 12장 게임 빌딩과 공유
- 빌드 옵션
- 웹 플레이어
- 웹 플레이어 스트림드
- PC 또는 Mac 스탠드얼론
- Mac OSX 대시보드 위젯
- 웹 플레이어
- 빌드 세팅
- 플레이어 세팅
- 크로스 플랫폼 세팅
- 플랫폼별 세팅
- 품질 세팅
- 플레이어 입력 세팅
- 게임 빌드
- 웹 빌드를 위한 수정
- 플랫폼에 따른 나가기 버튼 처리
- 스트리밍 준비
- 첫 빌드
- 스탠드얼론 빌드
- 무료 버전과 프로 버전
- 웹 빌드
- 웹 빌드의 임베딩
- 웹 빌드를 위한 수정
- 공유
- Kongregate.com
- 요약
- 빌드 옵션
- 13장 테스트와 향후 개발
- 경험을 통한 학습
- 테스트와 마무리
- 공개 테스트
- 프레임 레이트 피드백
- 성능 최적화
- 공개 테스트
- 향후 학습을 위한 자세
- 가급적 많은 베이스를 커버하라.
- 바퀴를 다시 발명할 필요는 없다.
- 모르면 물어라!