Skip to content

Instantly share code, notes, and snippets.

View Curookie's full-sized avatar
๐Ÿ 
Working from home

Curookie Curookie

๐Ÿ 
Working from home
View GitHub Profile
@Curookie
Curookie / MVC ๋””์ž์ธ ํŒจํ„ด
Created October 15, 2018 07:23
๋””์ž์ธ ํŒจํ„ด
Model View Controller์˜ ์•ฝ์ž๋กœ ์—ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„ธ๊ฐ€์ง€์˜ ์—ญํ• ๋กœ ๊ตฌ๋ถ„ํ•œ ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก ์ด๋‹ค.
์‚ฌ์šฉ์ž๊ฐ€ Controller๋ฅผ ์กฐ์ž‘ํ•˜๋ฉด Controller๋Š” Model์„ ํ†ตํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ 
๊ทธ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์‹œ๊ฐ์ ์ธ ํ‘œํ˜„์„ ๋‹ด๋‹นํ•˜๋Š” View๋ฅผ ์ œ์–ดํ•ด์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌํ•˜๊ฒŒ ๋œ๋‹ค.
User(Request)-> Controller(Manipulates) -> Model(Update) -> View(Sees) -> User(Response)
์Šคํ”„๋ง์˜ ์ฃผ์š” ๊ฐœ๋…์ด๋‹ค.
# MVC์˜ ์žฅ์ 
- ์œ ์—ฐํ•˜๊ณ  ํ™•์žฅํ•˜๊ธฐ ์‰ฝ๋‹ค
@Curookie
Curookie / ์œ ๋‹ˆํ‹ฐ(Unity 3D) ์ตœ์ ํ™”
Last active July 19, 2025 06:33
์œ ๋‹ˆํ‹ฐ ์ตœ์ ํ™”
โ˜… ๊ธฐ๋ฒ•
1. ์˜ค๋ธŒ์ ํŠธ ํ’€๋ง(Object Pooling)
์˜ค๋ธŒ์ ํŠธ ์ƒ์„ฑ(Instantiate)๊ณผ ์‚ญ์ œ(Destroy)์‹œ ๋ถ€ํ•˜์ฆ๊ฐ€๋กœ ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰ํ„ฐ(G.C) ํ˜ธ์ถœ ๋ ‰์ด ๋ฐœ์ƒ
๊ฐ์ฒด์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ์œ„ํ•ด ์‚ฌ์šฉ - ๋นˆ๋ฒˆํ•œ ์ฐธ์กฐ์ผ ๊ฒฝ์šฐ ์œ ์šฉํ•˜๋‹ค.
์˜ค๋ธŒ์ ํŠธ ์ƒ์„ฑ -> ์˜ค๋ธŒ์ ํŠธ ํ’€์— ๋„ฃ์Œ -> ๊บผ๋ƒ„ -> ์‚ฌ์šฉ์ „ ์ดˆ๊ธฐํ™” -> ์‚ฌ์šฉ -> ์‚ฌ์šฉ ์ข…๋ฃŒ -> ์˜ค๋ธŒ์ ํŠธ ํ’€์— ๋„ฃ์Œ.
๋‹ค์‹œ ์‚ฌ์šฉ์ด ํ•„์š”ํ•  ๋•Œ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  pool์—์„œ ๊บผ๋‚ธ๋‹ค.
2. ์ปฌ๋ง(Culling)
Culling๊ธฐ๋ฒ•์€ ํ™”๋ฉด๋‚ด์—์„œ ๋ Œ๋”๋งํ•˜์ง€์•Š์•„๋„ ๋˜๋Š” ๋ถˆํ•„์š”ํ•œ๋ถ€๋ถ„๋“ค์„ ๋ Œ๋”๋ง์—์„œ ๋ฐฐ์ œํ•˜๊ณ 
์ •๋ ฌ์€ ์•ˆ์ • ์ •๋ ฌ ( ๋ฒ„๋ธ” ์ •๋ ฌ, ์‚ฝ์ž… ์ •๋ ฌ, ๋ณ‘๋ ฌ ์ •๋ ฌ )๊ณผ ๋ถˆ์•ˆ์ • ์ •๋ ฌ ( ์„ ํƒ ์ •๋ ฌ, ํ€ต ์ •๋ ฌ )์ด ์žˆ๋‹ค.
๋‹จ์ˆœ(๊ตฌํ˜„ ๊ฐ„๋‹จ)ํ•˜์ง€๋งŒ ๋น„ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•
์‚ฝ์ž… ์ •๋ ฌ, ์„ ํƒ ์ •๋ ฌ, ๋ฒ„๋ธ” ์ •๋ ฌ
๋ณต์žกํ•˜์ง€๋งŒ ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•
ํ€ต ์ •๋ ฌ, ํž™ ์ •๋ ฌ, ํ•ฉ๋ณ‘ ์ •๋ ฌ, ๊ธฐ์ˆ˜ ์ •๋ ฌ
์‚ฝ์ž… ์ •๋ ฌ (Insertion Sort)
์†์•ˆ์˜ ์นด๋“œ๋ฅผ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์œ ์‚ฌํ•˜๋‹ค.
ํ”„๋กœ๊ทธ๋žจ์˜ ๊ตฌํ˜„ ๋ฐ ๊ด€๋ฆฌ๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด
์—ฐ๊ด€์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ๋ฌถ์„ ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•์  ์žฅ์น˜๋กœ ๋“ฑ์žฅ.
C์–ธ์–ด์—์„œ์˜ struct๋Š” ์—ฐ๊ด€์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌถ์„ ์ˆ˜ ์žˆ๊ธฐ๋งŒ ํ•˜์ง€๋งŒ ํ•จ์ˆ˜ ์„ ์–ธ ๋ฐ ์ •์˜, ์ƒ์„ฑ์ž ๋ฐ ์†Œ๋ฉธ์ž ์„ ์–ธ ๋ฐ ์ •์˜, ์ƒ์† ๊ตฌ์กฐ๋ฅผ ํ•  ์ˆ˜ ์—†๋‹ค.
ํ•˜์ง€๋งŒ C++์—์„œ์˜ struct๋Š” class์˜ ๋™์ž‘๋ฐฉ์‹์ด ์ผ์น˜ํ•œ๋‹ค๊ณ  ๋ณด๋ฉด๋œ๋‹ค.
ํ•จ์ˆ˜ ์„ ์–ธ ๋ฐ ์ •์˜, ์ƒ์„ฑ์ž ๋ฐ ์†Œ๋ฉธ์ž ์„ ์–ธ ๋ฐ ์ •์˜, ์ƒ์† ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
C++ struct์™€ class์˜ ์ฐจ์ด์ ์€ ๋ฉค๋ฒ„์˜ ์ ‘๊ทผ ์ง€์‹œ์ž์˜ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.
์ฆ‰, ๊ตฌ์กฐ์ฒด๋Š” ์ ‘๊ทผ์ œ์–ด ์ง€์‹œ์ž๋ฅผ ์„ ์–ธํ•˜์ง€์•Š์œผ๋ฉด public ์œผ๋กœ ํด๋ž˜์Šค๋Š” private๋กœ ์„ ์–ธ๋œ๋‹ค๋Š” ๊ฒƒ.
์ธํ„ฐํŽ˜์ด์Šค : method์˜ ์›ํ˜•๋งŒ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Œ
1. ๋ณ€์ˆ˜ ์„ ์–ธ ๋ถˆ๊ฐ€๋Šฅ
2. ํ•จ์ˆ˜ ์ •์˜ ๋ถˆ๊ฐ€๋Šฅ
3. ํ•จ์ˆ˜ ์›ํ˜• ์„ ์–ธ ๊ฐ€๋Šฅ
์ž๋ฐ”์—์„œ๋Š” ๋‹ค์ค‘ ์ƒ์†์ด ๊ฐ€๋Šฅ.
์ถ”์ƒํด๋ž˜์Šค : ์ถ”์ƒ method๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ํด๋ž˜์Šค, ๊ฐ์ฒด ๊ฐ€์งˆ ์ˆ˜ ์—†์Œ (class ์ƒ์„ฑ ๋ถˆ๊ฐ€)
1. ๋ณ€์ˆ˜ ์„ ์–ธ ๊ฐ€๋Šฅ
2. ํ•จ์ˆ˜ ์ •์˜ ๊ฐ€๋Šฅ
3. ํ•จ์ˆ˜ ์›ํ˜•๋งŒ ์„ ์–ธ ๊ฐ€๋Šฅ
@Curookie
Curookie / ๋‹คํ˜•์„ฑ(Polymorphism)์ด๋ž€?
Created October 12, 2018 16:19
๊ฐ์ฒด์ง€ํ–ฅ OOP
๊ฐ์ฒด์ง€ํ–ฅ์˜ ์ค‘์š”ํ•œ ๊ฐœ๋…์œผ๋กœ์„œ ์ƒ์†๊ณผ๋„ ์—ฐ๊ฒฐ๋˜๋Š” ๊ฐœ๋…์ด๋‹ค.
ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ๊ฒฝ์šฐ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ๊ทธ๋Ÿผ ๊ฐ™์€ ํ•จ์ˆ˜์ง€๋งŒ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
์ด๋Ÿฐ ๊ตฌ์กฐ๋ฅผ ๋‹คํ˜•์„ฑ์ด๋ผ๊ณ  ํ•œ๋‹ค.
๊ฒฐ๊ตญ ์ƒ์† ํ›„ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์˜ ํ˜•ํƒœ = ๋‹คํ˜•์„ฑ
[์†Œ๊ฐœ]
C/C++์„ ์ฐธ์กฐํ•œ ์–ธ์–ด, ๋‹ท๋„ท ์ „์šฉ์–ธ์–ด
์•ฝ๊ฐ„ ๋ชจ๋“  ์–ธ์–ด์˜ ์งฌ๋ฝ•์ด๋ผ๋Š” ์†Œ๋ฆฌ๋ฅผ ๋“ฃ๊ธฐ๋„ ํ•œ๋‹ค.
[ํŠน์ง•]
๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค.
๋‹ค์ค‘์ƒ์†์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
ํด๋ž˜์Šค๊ฐ„์˜ ํ”„๋ Œ๋“œ ์ง€์ •์„ ํ•  ์ˆ˜ ์—†๋‹ค.
๋””ํดํŠธ ์ธ์ˆ˜๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
์ž๋ฃŒํ˜•์— ๋Œ€ํ•ด ์—„๊ฒฉํ•˜๋‹ค.
1. ์›ํ˜•(Circle) ๊ทธ๋ฆผ์ž ๊ธฐ๋ฒ•
์„ฑ๋Šฅ ๋ฌธ์ œ๋•Œ๋ฌธ์— ๋ชจ๋ฐ”์ผ ์žฅ์น˜์—์„œ๋Š” ๊ทธ๋ฆผ์ž๋ฅผ ๋™๊ทธ๋ผ๋ฏธ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.
์›ํ˜•์˜ ํ…์Šค์ณ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ‰๋ฉด์„ ๋งŒ๋“ค๊ณ  ๊ทธ๊ฑธ ์ผ€๋ฆญํ„ฐ ๋ฐ‘์— ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ์ด์ง€์š”.
ํ˜•ํƒœ๋Š” ๋„ˆ๋ฌด๋‚˜๋„ ๊ฐ„๋‹จํ•˜๊ธดํ•˜์ง€๋งŒ ์ด ๋งˆ์ €๋„ ์—†๋Š”๊ฒƒ๊ณผ ์žˆ๋Š”๊ฒƒ์˜ ์ฐจ์ด๋Š” ํฝ๋‹ˆ๋‹ค.
๋‹จ์  - ํ‰๋ฉด์ด ์•„๋‹ˆ๊ณ ์„œ๋Š” ํ‘œํ˜„์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋‹จ์ ์€ ์žˆ๋‹ค.
2. ํˆฌ์˜(Projected Shadow) ๊ทธ๋ฆผ์ž ๊ธฐ๋ฒ•
Direct Light๊ธฐ๋Šฅ์ฒ˜๋Ÿผ ๊ด‘์›์—์„œ ํˆฌ์˜ํ•˜๋Š” ๊ทธ๋ฆผ์ž์˜ ํ…์Šค์ฒ˜๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ƒ์„ฑํ•ด
๊ทธ๋ฆผ์ž ํ…์Šค์ณ์— ์ €์žฅํ•˜์—ฌ ํ‰๋ฉด์ด ์•„๋‹ˆ์—ฌ๋„ ์‹ค์ œ ๊ทธ๋ฆผ์ž ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ํ•จ.
Cull ์ถ”๋ ค์„œ ์ฃฝ์ด๋‹ค. ์˜ ๋œป Culling ์“ธ๋Œ€์—†๋Š” ๋ Œ๋”๋ง์„ ๋ฐฐ์ œํ•จ
Culling๊ธฐ๋ฒ•์€ ํ™”๋ฉด๋‚ด์—์„œ ๋ Œ๋”๋งํ•˜์ง€์•Š์•„๋„ ๋˜๋Š” ๋ถˆํ•„์š”ํ•œ๋ถ€๋ถ„๋“ค์„ ๋ Œ๋”๋ง์—์„œ ๋ฐฐ์ œํ•˜๊ณ 
ํ™”๋ฉด๋‚ด์—์„œ ๋ณด์—ฌ์ง€๋Š” ๋ถ€๋ถ„๋งŒ ๋ Œ๋”๋งํ•˜์—ฌ ์ตœ์ ํ™”๋ฅผ ํ•˜๋Š”๋ฐฉ์‹์ด๋‹ค.
๋ฐฑํŽ˜์ด์Šค(ํ›„๋ฉด์„ ๋ณ„) ์ปฌ๋ง Backface Culling : ํด๋ฆฌ๊ณค์˜ ํ›„๋ฉด์„ ์ œ๊ฑฐํ•œ๋‹ค.
ํ”„๋กœ์Šคํ…€(์‹œ๊ฐ์ ˆ๋‘์ฒด) ์ปฌ๋ง Frustum Culling : ์นด๋ฉ”๋ผ ์˜์—ญ๋‚ด ๋“œ๋กœ์ž‰ ์ •๋ณด๋งŒ ์‚ด๋ฆฌ๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ฒ„๋ฆผ, ๊ฐ€๋ ค์ง„ ๊ฒƒ๋„ ์‚ด๋ฆผ.
๋ ˆ์ด์–ด๋ณ„ ์ฐจ๋‹จ ๊ฑฐ๋ฆฌ ์„ค์ • Per Layer Cull Distances
์˜ค์ผ๋Ÿฌ(Euler)์™€ ์ฟผํ„ฐ๋‹ˆ์˜จ(Quaternion)์€ 3D ๋ณ€ํ™˜์—์„œ ํšŒ์ „์„ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
์˜ค์ผ๋Ÿฌ๋Š” 3๊ฐœ์˜ ์ถ•์— ๋Œ€ํ•œ ๊ฐ๋„๋ฅผ ํšŒ์ „ ์ •๋ณด๋กœ ์‚ฌ์šฉํ•œ๋‹ค. X,Y,Z์ถ•์— ๋Œ€ํ•ด ํšŒ์ „ํ•œ ๋งŒํผ์„ ๋งํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
์˜ค์ผ๋Ÿฌ์—์„œ๋Š” ๊ฐ ์ถ•์„ Right, Up, Forward๋ผ ๋ถ€๋ฅด๊ณ  ๊ฐ ์ถ•์— ๋Œ€ํ•œ ๊ฐ๋„๋ฅผ Pitch, Roll, Yaw๋ผ ๋ถ€๋ฅธ๋‹ค.
์ด ๋ฐฉ์‹์€ ๋น„ํ–‰๊ธฐ์˜ ์ž์„ธ ํ‘œํ˜„ ์ •๋ณด๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.
์ด ๋ฐฉ์‹์˜ ์žฅ์ ์€ ๋งค์šฐ ์ง๊ด€์ ์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค.
์ด ์žฅ์ ๋•Œ๋ฌธ์— ๋งŽ์€ 3D๊ด€๋ จ ํ”„๋กœ๊ทธ๋žจ์€ ํšŒ์ „ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•  ๋•Œ Euler๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.
์˜ค์ผ๋Ÿฌ ๋ฐฉ์‹์œผ๋กœ ํšŒ์ „ ์ •๋ณด๋ฅผ ํ‘œํ˜„ํ•˜๋ฉด ๊ฐ ์ถ•์— ๋Œ€ํ•ด 3๊ฐœ์˜ ํšŒ์ „ํ–‰๋ ฌ์ด ๋œ๋‹ค.