앱 디자인 시작하기
Starting App Design
2014. 9. 11
이 강의는 앱 디자인을 시작하는
디자이너를 위한 강의입니다.
강의 순서
1. 강의에 들어가며
2. 앱 디자인 시작하기
3. Case Study
4. 작업하기
5. 마치며
- 강의 페이지: http://isangho.com/study/appdesign
- SlideShare: https://www.slideshare.net/SanghoLee1/ss-38908104
- 비트코인 기부하기: http://daramghaus.com/donate/bitcoin
- 이메일: isangho@me.com
앱 디자인 시작하기
Starting App Design
2014. 9. 11
이 강의는 앱 디자인을 시작하는
디자이너를 위한 강의입니다.
강의 순서
1. 강의에 들어가며
2. 앱 디자인 시작하기
3. Case Study
4. 작업하기
5. 마치며
- 강의 페이지: http://isangho.com/study/appdesign
- SlideShare: https://www.slideshare.net/SanghoLee1/ss-38908104
- 비트코인 기부하기: http://daramghaus.com/donate/bitcoin
- 이메일: isangho@me.com
[ITOnAir] 데브멘토 동영상, 김정미 네무스텍 수석_성공하는 모바일 서비스를 위한 실전 강연
본 영상은 김정미 네무스텍 수석의 실제 개발자와 UI 디자이너와의 커뮤니케이션 방법을 사례를 통해 분석해보는 강연입니다.실제 개발자와 디자이너 간 협업이 어떤 방법으로 이뤄져야 효율적인지를 살펴보는 중요한 자료가 될 것입니다.본 영상은 데브멘토 ITOnAir (tv.devmento.co.kr) 또는 다음tv팟(tvpot.daum.net/pot/Itonair)을 통해 웹과 모바일로 시청하실 수 있습니다.
<실제>
< '#'에 맞춰서 다음 슬라이드로 넘어가시면 됨.>
안녕하세요. NHN NEXT의, 최연소 참가자 19살 남세현입니다.
#저는 일정 공유가 핵심인 달력어플을 만들고있습니다.
#흠… 일정을 공유를 어떻게 해야할까요?
서버에서 처리하는거 말곤 없을까 생각하다가
다음 3가지가 떠올랐습니다.
#아이폰은 사진같은거 말고는 어플끼리 파일공유가 힘듭니다.
사람들이 많이 사용하는게 라인, 카톡인데요
라인 카톡으로 많이하는건 텍스트 보내기, #사진보내기 입니다.
#사진에 데이터를 녹여넣고, 그 사진을 메신저로 전달하면 어떨까요
#사진은 공용 저장소인 사진보관함에 저장되는데, 모든 어플에서 접근이 가능합니다.
기존엔 파일을 다운받아도 관리도 안되고 공유도 힘들고... 그것이 해결할 수 있습니다.
#어떻게 파일을 사진에 녹여내냐면,
모든 데이터는 이진수로 이루어져 있습니다. 그 이진수를 사진의 픽셀 RGB값에 대입하겠다는 겁니다.
#이것이 그렇게 해서 만든 사진데이터입니다. 저는 앞으로 이런걸 "사진데이터" 라고 부르겠습니다.
어떤 데이터가 담겨져 있을까요?
제가 말하기 전까지는 모릅니다.
몇천개의 인트형 정수가 저장되어있습니다.
#이게 어느 어플에서 저장한 데이터인지, 피피티자료인지 음악자료인지 알 수 없습니다.
컴퓨터를 쓸땐 파일에 '이름과 아이콘'을 붙입니다.
#파일 내부의 이진수 데이터는 인간이 읽을 수 없지만, #겉의 파일 이름과 아이콘으로 구분할수있습니다.
#그렇다면 이 사진데이터도 겉으로 봤을땐 사람이 읽을 수 있는 글씨이고, 컴퓨터는 데이터로 인식하게 만들면 되지 않을까요?
#이것이 바로 그렇게 만든 사진데이터입니다.
#밝기가 확실히 밝아졌죠?
#한 픽셀의, RGB값의 뺀 앞부분 #두 비트를 이용해서 사람이 노이즈 속에서도 글씨를 읽어낼 수 있게 할 수 있습니다.
#글씨가 있는 부분은 앞 두개는 무조건 11, 나머지 여섯개는 데이터의 이진수값. 반대로 글씨가 없는부분은 앞에는 00, 나머지는 데이터를 집어넣습니다.
#앞에 두 비트가 차지하는 명암의 비중이 75%나 됩니다. 아무리 뒤에 6비트가 커도, 화면밝기로 절대 따라갈 수 없습니다.
#사람은 명암 구분을 제일 잘합니다. 명암이 75%이나 차이나면 노이즈가 있음에도 글씨를 볼 수 있습니다.
그래서, 사진데이터에 파일의 속성을 글씨로 써줍니다.
#마치 바탕화면 보는것처럼 저게 무슨 사진데이터인지 파악할 수 있습니다.
#압축파일, 게임세이브데이터, 내스케줄, 음악, 에러로그, 초대권, 그 무엇도 다 이런식으로 저장할 수 있습니다. 일종의 QR코드 진화판이죠.
#저는 모든 개발자들이 쉽게 데이터를 사진으로 저장하고,
사진에서 데이터를 불러올 수 있는 api를 라이브러리 형태로 오픈소스 제공합니다.
#이것이 가지는 의미를 찾아봅시다
#파일. 자료는 사용자 자신이 주인이 되어서 스스로 관리할수 있어야 합니다.
#클라우드 시대가 왔다지만, 사용자경험을 고려하지 않은 디자인이 많습니다.
애플의 폐쇄성때문에 어플끼리 파일 옮기는게 힘들어서 대부분 클라우드와 URL을 통해서 작업합니다. 로컬이 단단하지 않은 상태에서 모든걸 클라우드에게 맞기겠다는 건 말이 안됩니다. #그때문에 일어난 불편함을 개발자와 사용자 둘다 느끼고 있습니다. 스마트폰은 특히나 네트워크 단절이 드문 기계잖아요
#그 누구도 파일을 보내기 위해서 클라우드 어플을
The document discusses connectors in simulation modeling. Connectors define connection locations and linked entities, and manage realized finite element representations like welds. They allow quick reconnection of parts. Connectors have three states - unrealized, realized, and failed. They separate the connection definition from the finite element representation, allowing easy re-realization with different element types. Connector panels are used to create different connector types and control their realization.
1. The document discusses various SQL constraints that can be used when creating tables such as PRIMARY KEY, NOT NULL, DEFAULT, UNIQUE, and AUTO_INCREMENT.
2. Examples are provided of creating tables with different constraints like PRIMARY KEY to enforce a unique identifier column, NOT NULL for required fields, DEFAULT to set a default value, and UNIQUE for uniquely identifying columns.
3. The document also covers composite UNIQUE constraints to enforce uniqueness across multiple columns together rather than individually.
[ITOnAir] 데브멘토 동영상, 김정미 네무스텍 수석_성공하는 모바일 서비스를 위한 실전 강연
본 영상은 김정미 네무스텍 수석의 실제 개발자와 UI 디자이너와의 커뮤니케이션 방법을 사례를 통해 분석해보는 강연입니다.실제 개발자와 디자이너 간 협업이 어떤 방법으로 이뤄져야 효율적인지를 살펴보는 중요한 자료가 될 것입니다.본 영상은 데브멘토 ITOnAir (tv.devmento.co.kr) 또는 다음tv팟(tvpot.daum.net/pot/Itonair)을 통해 웹과 모바일로 시청하실 수 있습니다.
<실제>
< '#'에 맞춰서 다음 슬라이드로 넘어가시면 됨.>
안녕하세요. NHN NEXT의, 최연소 참가자 19살 남세현입니다.
#저는 일정 공유가 핵심인 달력어플을 만들고있습니다.
#흠… 일정을 공유를 어떻게 해야할까요?
서버에서 처리하는거 말곤 없을까 생각하다가
다음 3가지가 떠올랐습니다.
#아이폰은 사진같은거 말고는 어플끼리 파일공유가 힘듭니다.
사람들이 많이 사용하는게 라인, 카톡인데요
라인 카톡으로 많이하는건 텍스트 보내기, #사진보내기 입니다.
#사진에 데이터를 녹여넣고, 그 사진을 메신저로 전달하면 어떨까요
#사진은 공용 저장소인 사진보관함에 저장되는데, 모든 어플에서 접근이 가능합니다.
기존엔 파일을 다운받아도 관리도 안되고 공유도 힘들고... 그것이 해결할 수 있습니다.
#어떻게 파일을 사진에 녹여내냐면,
모든 데이터는 이진수로 이루어져 있습니다. 그 이진수를 사진의 픽셀 RGB값에 대입하겠다는 겁니다.
#이것이 그렇게 해서 만든 사진데이터입니다. 저는 앞으로 이런걸 "사진데이터" 라고 부르겠습니다.
어떤 데이터가 담겨져 있을까요?
제가 말하기 전까지는 모릅니다.
몇천개의 인트형 정수가 저장되어있습니다.
#이게 어느 어플에서 저장한 데이터인지, 피피티자료인지 음악자료인지 알 수 없습니다.
컴퓨터를 쓸땐 파일에 '이름과 아이콘'을 붙입니다.
#파일 내부의 이진수 데이터는 인간이 읽을 수 없지만, #겉의 파일 이름과 아이콘으로 구분할수있습니다.
#그렇다면 이 사진데이터도 겉으로 봤을땐 사람이 읽을 수 있는 글씨이고, 컴퓨터는 데이터로 인식하게 만들면 되지 않을까요?
#이것이 바로 그렇게 만든 사진데이터입니다.
#밝기가 확실히 밝아졌죠?
#한 픽셀의, RGB값의 뺀 앞부분 #두 비트를 이용해서 사람이 노이즈 속에서도 글씨를 읽어낼 수 있게 할 수 있습니다.
#글씨가 있는 부분은 앞 두개는 무조건 11, 나머지 여섯개는 데이터의 이진수값. 반대로 글씨가 없는부분은 앞에는 00, 나머지는 데이터를 집어넣습니다.
#앞에 두 비트가 차지하는 명암의 비중이 75%나 됩니다. 아무리 뒤에 6비트가 커도, 화면밝기로 절대 따라갈 수 없습니다.
#사람은 명암 구분을 제일 잘합니다. 명암이 75%이나 차이나면 노이즈가 있음에도 글씨를 볼 수 있습니다.
그래서, 사진데이터에 파일의 속성을 글씨로 써줍니다.
#마치 바탕화면 보는것처럼 저게 무슨 사진데이터인지 파악할 수 있습니다.
#압축파일, 게임세이브데이터, 내스케줄, 음악, 에러로그, 초대권, 그 무엇도 다 이런식으로 저장할 수 있습니다. 일종의 QR코드 진화판이죠.
#저는 모든 개발자들이 쉽게 데이터를 사진으로 저장하고,
사진에서 데이터를 불러올 수 있는 api를 라이브러리 형태로 오픈소스 제공합니다.
#이것이 가지는 의미를 찾아봅시다
#파일. 자료는 사용자 자신이 주인이 되어서 스스로 관리할수 있어야 합니다.
#클라우드 시대가 왔다지만, 사용자경험을 고려하지 않은 디자인이 많습니다.
애플의 폐쇄성때문에 어플끼리 파일 옮기는게 힘들어서 대부분 클라우드와 URL을 통해서 작업합니다. 로컬이 단단하지 않은 상태에서 모든걸 클라우드에게 맞기겠다는 건 말이 안됩니다. #그때문에 일어난 불편함을 개발자와 사용자 둘다 느끼고 있습니다. 스마트폰은 특히나 네트워크 단절이 드문 기계잖아요
#그 누구도 파일을 보내기 위해서 클라우드 어플을
The document discusses connectors in simulation modeling. Connectors define connection locations and linked entities, and manage realized finite element representations like welds. They allow quick reconnection of parts. Connectors have three states - unrealized, realized, and failed. They separate the connection definition from the finite element representation, allowing easy re-realization with different element types. Connector panels are used to create different connector types and control their realization.
1. The document discusses various SQL constraints that can be used when creating tables such as PRIMARY KEY, NOT NULL, DEFAULT, UNIQUE, and AUTO_INCREMENT.
2. Examples are provided of creating tables with different constraints like PRIMARY KEY to enforce a unique identifier column, NOT NULL for required fields, DEFAULT to set a default value, and UNIQUE for uniquely identifying columns.
3. The document also covers composite UNIQUE constraints to enforce uniqueness across multiple columns together rather than individually.
* 나는 왜 개발자인데자신이 없을까?
초보 개발자들은 다양한 공부를 했으면서도, 정작 개발에는 자신이 없어합니다. 그 이유를 알아보고, 그것을 극복하는 방법을 이야기합니다. 개발자로서 어떤 생각을 하면서, 어떤 자세로 살아야 하는지, 새로운 기술은 어떻게 배워나가야하는지, 자신있어 보이는 선수 개발자는 뭐가 다른지를 설명합니다. 모든 초보 개발자들이 가지고 있는 내면의 자신감을 끌어 올릴 수 있도록 도와주고, 이제 소프트웨어 개발자로 서의 커리어를 시작하는 사람들이 지속가능한 발전과 성공을 할 수 있도록 도와줍니다.
동영상 link: http://serviceapi.nmv.naver.com/flash/convertIframeTag.nhn?vid=8102105A2B82DE6DC96D57AA820458275CD7&outKey=V1210a0ea4d005fd624546a616cd783b464042b6f6db81e78fe926a616cd783b46404&width=720&height=438
이걸 정리하게 된 이유는 사실, 기획자 디자이너 개발자 요렇게 소통의 파이프라인이 있다치면
그 와중에 혼선이 많아서 이다. 특히 모바일을 처음 접하는 디자이너의 경우에 @_@ 요런 표정으로 개발자와 이야기하다가 =_= 이러다가 잔뜩 썽난 표정으로 나오는 일이 참 많았는데 이미 우리가 잘 아는 그 구글의 모바일 가이드라인과 그 애플의 iOS 가이드라인을 정리했다.
2. NHN NEXT Eunjoo Im
Auto Layout
이란?
▪ View hierarchy 안 모든 view의 크기와 위치를
constraint를 기반으로 동적으로 계산함
▪ constraint 기반 접근법 사용
▪ 외부 변화: 슈퍼뷰의 사이즈나 모양 변화
▪ iOS: split view, 기기 회전, 전화나 녹음 등 bar 변화
▪ OSX: 윈도우 사이즈 조절
▪ 내부 변화: 뷰의 크기나 UI 컨트롤 변화
▪ 앱의 컨텐츠 화면 변화 e.g. 뉴스 앱의 기사 사이즈, 사진 앨
범의 사진 사이즈
▪ 여러 언어 지원 e.g. 영어 label -> 한국어 label, 통화 변경,
일본어 읽기 방식 변화
▪ Dynamic type 지원 e.g. 사용자의 앱 실행 중 폰트 사이즈
변경
출처: https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/index.html#//apple_ref/doc/uid/
TP40010853-CH7-SW1
3. NHN NEXT Eunjoo Im
UI 레이아웃
설정 방법
하드코딩 Autoresizing mask 사
용
Auto Layout 사용
하드코딩 Autoresizing Mask Auto Layout
장점
프로그래머의 자율성이 높음,
원하는대로 설정이 가능
슈퍼뷰 프레임의 변화에 따라
뷰의 프레임을 정의해서 외부
변화에 적용 가능
프레임 대신 constraint를 통
한 관계 중심으로 파악해서 내
부 외부 변화에 동적으로 적용
단점
모든 변화를 직접 파악해서 처
리해야 함
전체 레이아웃 중에서 지원하
는 범위가 작음
익숙해지기 어렵고 디버깅이
어려움
<Frame-Based Layout> <Auto Layout>
출처: https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/index.html#//apple_ref/doc/uid/
TP40010853-CH7-SW1
4. NHN NEXT Eunjoo Im
Constraint
▪ Item 1: 뷰나 레이아웃 가이드로 계산하려는 아이템
▪ Attribute 1: Item 1의 Constraint로 계산하려는 목표값
▪ Relationship: 방정식 좌항과 우항의 관계 - 동등, 이하, 이상
▪ Multiplie: 좌항에 곱해지는 배수
▪ Item 2: 계산의 기준으로 삼은 아이템, blank일 수 있음
▪ Attribute 2: Item 2의 Constraint, Item 2가 blank일 경우 Attribute가 아니
어야 함
▪ Constant: floating-point 오프셋 상수 값
▪ 하드코딩:
▪ myView.leadingAnchor.constraintEqualToAnchor
(margins.leadingAnchor).active = true
방정식처럼 계산
default: 1.0 default: 0.0
5. NHN NEXT Eunjoo Im
Auto Layout
Attributes
Attributes value 설명
Heights
Width
뷰의 크기
기본 설정. target task에 새로운 Activity 인스턴스를 생성하고
intent를 보냄, stack 어디든 놓일 수 있음
Top
Bottom
Baseline
스크린 아래로 갈 수록 커
짐
Center Y, Top, Bottom, Baseline과만 묶어서 사용 가능
Leading
Trailing
화면 끝으로 갈 수록 커짐
(reading direction이
좌->우 방향일 경우 우측
으로 갈 수록 커짐)
Leading, Trailing, Center X와만 묶어서 사용 가능
Left
Right
우측으로 갈 수록 커짐
Left, Right, Center X과만 묶어서 사용 가능
view의 reading 방향이 나라별로 다를 수 있으므로 사용 비권장,
Leading, Trailing 대체 사용 권장
Center X
Center Y
방정식의 다른 Attribute
에 좌우됨
Center X는 Center X, Leading, Trailing, Right, Left과,
Center Y는 Center Y, Top, Bottom, Baseline과 함께 사용 가능
표 (영어원문) 출처:
https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/AnatomyofaConstraint.html#//apple_ref/doc/uid/
TP40010853-CH9-SW1
6. NHN NEXT Eunjoo Im
Contraint
없이 사용하기
: Stack View
출처: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIStackView_Class_Reference/index.html#//apple_ref/doc/uid/TP40015256
▪ Stack View: contraints 없이 레이아웃 배치 가능
▪ axis: 스택 뷰의 가로 혹은 세로 정렬 방향 결정 (UIStackView)
▪ orientation: 스택 뷰의 가로 혹은 세로 정렬 방향 결정
(NSStackView)
▪ distribution: 축에 맞춘 내부 뷰의 레이아웃 결정
▪ alignment: 축과 수직 방향의 정렬 결정
▪ spacing: 이웃 뷰와의 거리 결정
몹시 심플한 예제: https://github.com/luvgaram/stackViewSimpleExample
9. NHN NEXT Eunjoo Im
Auto Layout
Debugging
(3)
▪ 로그에 Identifier 설정: 하드코딩하거나 Attribute Insperctor에서 identifier 프로퍼티 설정
▪ "<NSLayoutConstraint:0x7b58bac0 'Label Leading' UILabel:
0x7b58b040'Name'.leading == UIView:0x7b590790.leadingMargin>",
"<NSLayoutConstraint:0x7b56d020 'Label Width' H:[UILabel:
0x7b58b040'Name'(>=400)]>"
▪ 뷰와 Constraint를 눈으로 확인하기
▪ 시뮬레이터에서 앱 실행 후 XCode에서
Choose Debug > View Debugging > Show Alignment Rectangles
▪ View Debugger 사용
▪ Xcode debug bar의 Debug View Hierarchy button 클릭
▪ private iOS method (release build 에서는 사용 불가)
▪ _autolayoutTrace 사용(모호한 레이아웃 추적 시):
에러난 곳에서 lldb에 po [[UIWindow keyWindow] _autolayoutTrace]; 입력
▪ recursiveDescription: superview (프로퍼티 포함) 추적
▪ _ivarDescription /_methodDescription: 객체의 변수와 값 / 메서드를 모두 보여줌
▪ [UIViewController _printHierarchy] / [UIViewController _allDescriptions]: 위계
질서 출력
출처: https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/DebuggingTricksandTips.html#//apple_ref/doc/uid/
TP40010853-CH21-SW1
http://swiftiostutorials.com/using-private-undocumented-ios-methods-debugging/
10. NHN NEXT Eunjoo Im
Auto Layout
Guideline(1)
▪ 뷰의 프레임, 바운드나 센터 속성으로 뷰의 위치를 정하지 말라.
▪ constraint 로직을 줄여주는 stack view를 적극 활용하라.
▪ 뷰와 가장 가까운 이웃과 constraint를 설정하라.
▪ 이웃한 두 개의 버튼이 있다면 첫 버튼의 trailing edge로부터 두번째 버튼 leading
edge의 contraint를 설정하라. 첫 버튼을 건너 뛰어서 뷰의 가장자리로부터
contraint를 만들지 마라.
▪ 가급적 뷰의 높이나 너비를 고정하는 것을 피하라.
▪ Auto Layout을 사용하는 이유는 변화에 동적으로 반응하기 위함이다. 고정 크기를
사용하면 뷰의 반응성을 낮춘다. 필요시에는 뷰의 최소 크기나 최대 크기를 설정하라.
▪ contraint 설정이 어렵다면 Pin과 Align 도구를 사용하라. control+드래그보다 느리
지만 정확한 값과 관련 아이템을 설정하고 확인할 수 있다.
▪ 아이템의 프레임이 자동으로 갱신되는 경우를 주의하라. 아이템의 크기와 위치가 충
족되는 constraint가 없다면 갱신이 되지 않을 수 있다. 화면 밖에 위치한 뷰의 높이나
너비가 0이 돼서 사라지는 경우도 발생할 수 있다.
▪ 자유롭게 아이템 프레임을 갱신할 수 있으며 갱신 내용을 취소할 수도 있다.
▪ 레이아웃 내의 모든 뷰가 의미 있는 이름을 갖도록 하라. 도구 사용시 뷰를 식별하는데
도움이 된다.
▪ 시스템은 자동으로 텍스트나 타이틀을 통해 라벨과 버튼의 이름을 만든다. 다른 뷰의
경우 Identity inspector에서 설정하거나 document outline 상의 뷰를 더블 클릭
해서 이름을 만들 수 있다.
▪ right과 left 대신 leading과 trailing constraint를 사용하라.
▪ iOS의 semanticContentAttribute 프로퍼티나 OSX의
userInterfaceLayoutDirection 프로퍼티를 통해 뷰가 leading과 trailing edge를
계산하는 방법을 조정할 수 있다.
11. NHN NEXT Eunjoo Im
Auto Layout
Guideline(2)
▪ iOS에서 뷰 컨트롤러의 루트 뷰 가장자리로부터 constraint를 만들 때 아래
contraint를 사용하라.
▪ Horizontal constraints: layout margin으로부터 0 포인트
constraint를 사용하라. 시스템은 디바이스와, 앱이 뷰 컨트롤러를 보여
주는 방식을 기반해서 자동으로 거리를 맞춘다.
margin을 포함해 루트 뷰를 채우는 텍스트 객체의 경우 layout
margin 대신 가독성 있는 컨텐트 가이드를 사용하라.
배경 이미지처럼 루트 뷰를 모두 채우는 아이템의 경우 뷰의 leading과
trailing edge를 사용하라.
▪ Vertical constraints: 뷰가 bar 아래를 확장하는 경우 top과 bottom
margin을 사용하라. 이는 스크롤 뷰에 흔히 사용되는 패턴이나, 컨텐츠
의 초기 위치를 맞추려면 스크롤 뷰의 contentInset을 수정하고
scrollIndicatorInsets 프로퍼티를 수정해야 할 수 있다.
뷰가 bar 아래를 확장하지 않으면 레이아웃 가이드의 top과 bottom으
로부터 constraint를 만들라.
▪ 코드에서 뷰를 생성할 경우, translatesAutoresizingMaskIntoConstraints
프로퍼티를 NO로 설정하라. 그렇지 않으면 기본 설정으로 뷰의 프레임과
autoresizing mask를 기반으로 시스템이 자동 contraint들을 만든다. 커스
텀 constraint를 만들 경우 충돌이 발생하므로 미완성 레이아웃이 된다.
▪ OSX와 iOS가 레이아웃을 계산하는 방식이 다름에 유의하라.
▪ OSX에서는 Auto Layout으로 윈도우 컨텐츠와 윈도우 크기를 모두 수정할 수
있다.
▪ iOS에서는 시스템이 씬의 크기와 레이아웃을 결정하므로, Auto Layout으로
는 씬의 컨텐츠만을 수정할 수 있다.
▪ 이런 차이가 우선 순위 결정에 따라 레이아웃 디자인에 큰 영향을 미칠 수 있다.