๋ชฉ๋ก์ ์ฒด ๊ธ (1099)
KoreanFoodie's Study
์ธํฐํ์ด์ค์ ์ญํ ์ธํฐํ์ด์ค๋ ๊ฐ์ฒด์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์ ์ํ ํ์ ์ด๋ค. ๊ฐ๋ฐ ์ฝ๋๊ฐ ์ค๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ๋๋ ์ด์ ๋, ๊ฐ๋ฐ ์ฝ๋๋ฅผ ์์ ํ์ง ์๊ณ , ์ฌ์ฉํ๋ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ ์ ์๋๋ก ํ๊ธฐ ์ํด์์ด๋ค. ์ธํฐํ์ด์ค๋ ํ๋์ ๊ฐ์ฒด๊ฐ ์๋๋ผ ์ฌ๋ฌ ๊ฐ์ฒด๋ค๊ณผ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฏ๋ก ์ด๋ค ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋๋์ ๋ฐ๋ผ ์คํ ๋ด์ฉ๊ณผ ๋ฆฌํด๊ฐ์ด ๋ค๋ฅผ ์ ์๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ ์ฝ๋ ์ธก๋ฉด์์ ์ฝ๋ ๋ณ๊ฒฝ ์์ด ์คํ ๋ด์ฉ๊ณผ ๋ฆฌํด๊ฐ์ ๋ค์ํํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค. ์ธํฐํ์ด์ค ์ ์ธ ์ธํฐํ์ด์ค๋ "~.java" ํํ์ ์์ค ํ์ผ๋ก ์์ฑ๋๊ณ ์ปดํ์ผ๋ฌ(javac.exe)๋ฅผ ํตํด "~.class" ํํ๋ก ์ปดํ์ผ๋๊ธฐ ๋๋ฌธ์ ๋ฌผ๋ฆฌ์ ํํ๋ ํด๋์ค์ ๋์ผํ๋ค. public interface InterfaceName { ... } ์ธํฐํ์ด์ค๋ ์์์ ๋ฉ์๋๋ง์..
ํ์ ๋ณํ๊ณผ ๋คํ์ฑ (Polymorphism) ๋คํ์ฑ์ ๊ฐ์ ํ์ ์ด์ง๋ง ์คํ ๊ฒฐ๊ณผ๊ฐ ๋ค์ํ ๊ฐ์ฒด๋ฅผ ์ด์ฉํ ์ ์๋ ์ฑ์ง์ ๋งํ๋ค. ์๋ ํ์ ๋ณํ(Promotion) ์๋ ํ์ ๋ณํ์ ๊ฐ๋ ์ ์์์ ๋ถ๋ชจ์ ํน์ง๊ณผ ๊ธฐ๋ฅ์ ์์๋ฐ๊ธฐ ๋๋ฌธ์ ๋ถ๋ชจ์ ๋์ผํ๊ฒ ์ทจ๊ธ๋ ์ ์๋ค๋ ๊ฒ์ด๋ค. // Vehicle ์๋ ํ์ ๋ณํ์ด ๋ฐ์ํ๋ค! ์ฆ, ๋งค๊ฐ ๋ณ์์ ํ์ ์ด ํด๋์ค์ผ ๊ฒฝ์ฐ, ํด๋น ํด๋์ค์ ๊ฐ์ฒด๋ฟ๋ง ์๋๋ผ ์์ ๊ฐ์ฒด๊น์ง๋ ๋งค๊ฐ๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค! ๋งค๊ฐ๊ฐ์ผ๋ก ์ด๋ค ์์ ๊ฐ์ฒด๊ฐ ์ ๊ณต๋๋๋์ ๋ฐ๋ผ ๋ฉ์๋์ ์คํ ๊ฒฐ๊ณผ๋ ๋ค์ํด์ง ์ ์๋ค(๋งค๊ฐ ๋ณ์์ ๋คํ์ฑ). ์์ ๊ฐ์ฒด๊ฐ ๋ถ๋ชจ์ ๋ฉ์๋๋ฅผ ์ฌ์ ์(์ค๋ฒ๋ผ์ด๋ฉ)ํ๋ค๋ฉด ๋ฉ์๋ ๋ด๋ถ์์ ์ค๋ฒ๋ผ์ด๋ฉ๋ ๋ฉ์๋๋ฅผ ํธ์ถํจ์ผ๋ก์จ ๋ฉ์๋์ ์คํ ๊ฒฐ๊ณผ๋ ๋ค์ํด์ง๋ค. ๊ฐ์ ํ์ ๋ณํ ๊ฐ์ ..
์ด๋ ธํ ์ด์ ์ด๋ ธํ ์ด์ ์ ๋ฉํ๋ฐ์ดํฐ๋ผ๊ณ ๋ณผ์ ์๋ค. @AnnotationName ์ด๋ ธํ ์ด์ ์ ๋ค์ ์ธ ๊ฐ์ง ์ฉ๋๋ก ์ฌ์ฉ๋๋ค. 1. ์ปดํ์ผ๋ฌ์๊ฒ ์ฝ๋ ๋ฌธ๋ฒ ์๋ฌ๋ฅผ ์ฒดํฌํ๋๋ก ์ ๋ณด๋ฅผ ์ ๊ณต 2. ์ํํธ์จ์ด ๊ฐ๋ฐ ํด์ด ๋น๋๋ ๋ฐฐ์น ์ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์์ฑํ ์ ์๋๋ก ์ ๋ณด๋ฅผ ์ ๊ณต 3. ์คํ ์(๋ฐํ์ ์) ํน์ ๊ธฐ๋ฅ์ ์คํํ๋๋ก ์ ๋ณด๋ฅผ ์ ๊ณต ๋ํ์ ์ผ๋ก๋ @Override๊ฐ ์๋ค. (์์ ๋ฉ์๋ ์ฌ์ ์ ์) ์ด๋ ธํ ์ด์ ํ์ ์ ์์ ์ ์ฉ ์ด๋ ธํ ์ด์ ํ์ ์ ์ ์๋ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ ๊ฒ๊ณผ ์ ์ฌํ๋ค. ๋ค์๊ณผ ๊ฐ์ด @interface๋ฅผ ์ฌ์ฉํด์ ์ด๋ ธํ ์ด์ ์ ์ ์ํ๋ฉฐ, ๊ทธ ๋ค์ ์ฌ์ฉํ ์ด๋ ธํ ์ด์ ์ด๋ฆ์ด ์จ๋ค. public @interface AnnotationName { ํ์ elementName() [default ๊ฐ]..
ํจํค์ง ์๋ฐ์์๋ ํด๋์ค๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด ํจํค์ง๋ฅผ ์ฌ์ฉํ๋ค. ํจํค์ง์ ๋ฌผ๋ฆฌ์ ์ธ ํํ๋ ํ์ผ ์์คํ ์ ํด๋์ด๋ค. ํจํค์ง๋ ๋จ์ํ ํ์ผ ์์คํ ์ ํด๋ ๊ธฐ๋ฅ๋ง ํ๋ ๊ฒ์ด ์๋๋ผ ํด๋์ค์ ์ผ๋ถ๋ถ์ด๋ค. ํจํค์ง๋ ํด๋์ค๋ฅผ ์ ์ผํ๊ฒ ๋ง๋ค์ด์ฃผ๋ ์๋ณ์ ์ญํ ์ ํ๋ค. ํจํค์ง๋ ํด๋์ค๋ฅผ ์ ์ผํ๊ฒ ๋ง๋ค์ด์ฃผ๋ ์๋ณ์ ์ญํ ์ ํ๋ค. ํด๋์ค ์ด๋ฆ์ด ๋์ผํ๋๋ผ๋ ํจํค์ง๊ฐ ๋ค๋ฅด๋ฉด ๋ค๋ฅธ ํด๋์ค๋ก ์ธ์ํ๋ค. ํด๋์ค์ ์ ์ฒด ์ด๋ฆ์ "ํจํค์ง๋ช +ํด๋์ค๋ช "์ธ๋ฐ, ํจํค์ง๊ฐ ์/ํ์๋ก ๊ตฌ๋ถ๋์ด ์๋ค๋ฉด ๋ํธ(.)๋ฅผ ์ด์ฉํด ํํํ๋ค. ์์ํจํค์ง.ํ์ํจํค์ง.ํด๋์ค ํด๋์ค๋ฅผ ์ด๋์ํฌ ๋๋ ํจํค์ง ์ ์ฒด๋ฅผ ์ด๋์์ผ์ผ ํ๋ค. ์ฆ, myPackage ๋ด์ myClass๋ฅผ yourPackage๋ก ์ฎ๊ธด๋ค๋ฉด, ํด๋น ํด๋์ค๋ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค! ํจํค์ง ..
์ ์ (static) ์ ์ ๋ฉค๋ฒ๋ ํด๋์ค์ ๊ณ ์ ๋ ๋ฉค๋ฒ๋ก์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๊ณ ์ฌ์ฉํ ์ ์๋ ํ๋์ ๋ฉ์๋๋ฅผ ๋งํ๋ค. ํด๋์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ก ๋ก๋ฉ๋๋ฉด ์ ์ ๋ฉค๋ฒ๋ฅผ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋๋ฐ, ํด๋์ค ์ด๋ฆ๊ณผ ํจ๊ป ๋ํธ(.) ์ฐ์ฐ์๋ก ์ ๊ทผํ๋ค. int a = myClass.value; myClass.doSomething(a); ์ ์ ์ด๊ธฐํ ๋ธ๋ก ์ ์ ํ๋๋ ๋ค์๊ณผ ๊ฐ์ด ํ๋ ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐ๊ฐ์ ์ฃผ๋ ๊ฒ์ด ๋ณดํต์ด๋ค. ๊ทธ๋ฌ๋ ๊ณ์ฐ์ด ํ์ํ ์ด๊ธฐํ ์์ ์ ๊ฒฝ์ฐ, ์ ์ ๋ธ๋ก(static block)์ ์ฌ์ฉํ ์ ์๋ค. static { ... } ์ ์ ๋ธ๋ก์ ํด๋์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ก ๋ก๋ฉ๋ ๋ ์๋์ ์ผ๋ก ์คํ๋๋ค. ์ ์ ๋ธ๋ก์ ํด๋์ค ๋ด๋ถ์ ์ฌ๋ฌ ๊ฐ๊ฐ ์ ์ธ๋์ด๋ ์๊ด์๊ณ , ์ ์ธ๋ ์์๋๋ก ์คํ๋๋ค. public class TV..
๋ฐ์ดํฐ ํ์ ๋ฐ์ดํฐ ํ์ ์ primitive type๊ณผ reference type(์ฐธ์กฐ ํ์ )์ผ๋ก ๋๋๋ค. ์ฐธ์กฐ ํ์ ์ด๋ ๊ฐ์ฒด์ ๋ฒ์ง๋ฅผ ์ฐธ์กฐํ๋ ํ์ ์ผ๋ก, ๋ฐฐ์ด, ์ด๊ฑฐ, ํด๋์ค, ์ธํฐํ์ด์ค ํ์ ์ด ์ด์ ํด๋น๋๋ค. ์๋ฐ๋ ๋ฐฐ์ด์ ์ฃผ์๋ฅผ ์คํ ์์ญ์, ์ค์ ๋ฐ์ดํฐ ๊ฐ์ ํ ์์ญ์ ํ ๋นํ๋ค. ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ์์ญ JVM์ ์ด์์ฒด์ ์์ ํ ๋น๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ(Runtime Data Area)๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ๋ถํด์ ์ฌ์ฉํ๋ค. 1. ๋ฉ์๋ ์์ญ : ์ฝ๋์์ ์ฌ์ฉ๋๋ ํด๋์ค(~.class)๋ค์ ํด๋์ค ๋ก๋๋ก ์ฝ์ด ํด๋์ค๋ณ๋ก ๋ฐํ์ ์์ํ(runtime constant pool), ํ๋(fiedl) ๋ฐ์ดํฐ, ๋ฉ์๋(method) ๋ฐ์ดํฐ, ๋ฉ์๋ ์ฝ๋, ์์ฑ์(constructor) ์ฝ๋ ๋ฑ์ ๋ถ๋ฅํด์ ์ ์ฅํ๋ค. ๋ฉ์๋ ์..
๋ฒกํฐ ๋ฒกํฐ๋ ๋ฐฉํฅ๊ณผ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋ค. ๋ฒกํฐ (1, 0, 2)์ด ์์๋, ํด๋น ๋ฒกํฐ์ ํฌ๊ธฐ๋ sqrt(1^2 + 2^2)์ด ๋๋ค. ์ ๋ํฐ๋ Vector2, Vector3, Vector4 ํ์ ์ ์ง์ํ๋ค. ์๋ก์ด ๋ฒกํฐ๋ฅผ ๋ง๋ค ๋๋ ์์ฑ์๋ฅผ ํธ์ถํ๋ฉด ๋๋ค. // Vector๋ ํด๋์ค๊ฐ ์๋๋ผ ๊ตฌ์กฐ์ฒด์ด๋ค! public struct Vector3 { public float x; public float y; public float z; // Vector3 ๋ด๋ถ ์ฝ๋ } Vector3 a = new Vector3(0, 0, 0); Vector3 b = a; b.x = 100; ๋ฒกํฐ์ ์ฐ์ฐ ๋ด์ ๊ณผ ์ธ์ ์ ์๋ฏธ๋ฅผ ์ดํดํ๋ ๊ฒ์ด ์ค์ํ๋ค. ๋ฐฑํฐ์ ๋ด์ ์ Dot Product๋ผ๊ณ ํ๋๋ฐ, a · b ๋ผ๊ณ ํ๋ฉด, ๋ฒกํฐ b๋ฅผ a์..
๋ฐ๋ฅ ํ์ Rotate( ) ๋ฉ์๋๋ฅผ ์ด์ฉํด์ ๋ฌผ์ฒด๋ฅผ ํ์ ์ํฌ ์ ์๋ค. public class Rotator : MonoBehaviour { public float rotationSpeed = 60f; // Update is called once per frame void Update() { transform.Rotate(0f, rotationSpeed * Time.deltaTime, 0f); } } ์์์ rotationSpeed์ Time.deltaTime์ ๊ณฑํฉ์ผ๋ก์จ, ์ด๋ค ๊ธฐ๊ธฐ์์๋ ์์ ์ ์ผ๋ก 1์ด๋ง๋ค rotationSpeed๋งํผ์ ๊ฐ๋์ ํ์ ์ ์ค ์ ์๋ค. Update( ) ๋ 1ํ๋ ์๋ง๋ค ์คํ๋๋ฉฐ, Time.deltaTime์ ( 1 / ์ด๋น ํ๋ ์ ์)์ด๋ฏ๋ก, ํ๋ ์์ด 60์ด๋ 120์ด๋ ..
ํ๋ฆฌํน ๊ฒ์ ์ค๋ธํ ํธ๋ ํ๋ฆฌํน์ผ๋ก ๋ง๋ค์ด ์ฌํ์ฉํ ์ ์๋ค. ๋ง์น, ์นผ์ ์ฐ์ด๋ด๋ ์ฃผ๋ฌผ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค! ์ฌ์ฉ๋ฒ์ ๊ฐ๋จํ๋ค. Hierarchy์ ์๋ ์ค๋ธ์ ํธ๋ฅผ ํ๋ก์ ํธ ์ฐฝ์ ๋๋๊ทธ&๋๋ ํด์ฃผ๊ธฐ๋ง ํ๋ฉด ๋๋ค! Use Gravity ๋ฆฌ์ง๋ ๋ฐ๋ ์ปดํฌ๋ํธ์ Use Gravity ํ๋๋ฅผ ํด์ ํ๋ฉด ์ค๋ ฅ์ ์ํฅ์ ๋ฐ์ง ์๋๋ค. transform ๋ณ์ transform์ ์คํฌ๋ฆฝํธ์์ ์์ ์ ํธ๋์คํผ ์ปดํฌ๋ํธ๋ก ๋ฐ๋ก ์ ๊ทผํ๋ ์ง๋ฆ๊ธธ์ด๋ค! Destroy( ) void Start() { // ์ด๋์ ์ฌ์ฉํ ๋ฆฌ์ง๋๋ฐ๋ ์ปดํฌ๋ํธ ํ ๋น bulletRigidbody = GetComponent(); // ๋ฆฌ์ง๋๋ฐ๋์ ์๋ = ์์ชฝ ๋ฐฉํฅ * ์ด๋ ์๋ ฅ bulletRigidbody.velocity = transform.forwa..
๋จธํฐ๋ฆฌ์ผ ๊ฒ์ ์ค๋ธ์ ํธ์ ์ปฌ๋ฌ๋ ๋จธํฐ๋ฆฌ์ผ(Material)์ด ๊ฒฐ์ ํ๋ค. ๋จธํฐ๋ฆฌ์ผ์ ์ ฐ์ด๋์ ํ ์ค์ณ๊ฐ ํฉ์ณ์ง ์์ ์ผ๋ก, ์ค๋ธ์ ํธ์ ํฝ์ ์ปฌ๋ฌ๋ฅผ ๊ฒฐ์ ํ๋ค ์ ฐ์ด๋๋ ์ฃผ์ด์ง ์ ๋ ฅ์ ๋ฐ๋ผ ํฝ์ ์ ์ต์ข ์ปฌ๋ฌ๋ฅผ ๊ฒฐ์ ํ๋ ์ฝ๋์ด๋ค. ์ ฐ์ด๋๋ ์ง๊ฐ๊ณผ ๋น์ ์ํ ๋ฐ์ฌ์ ๊ตด์ ๋ฑ์ ํจ๊ณผ๋ฅผ ๋ง๋ ๋ค. ํ ์ค์ฒ๋ ํ๋ฉด์ ์ ํ๋ ์ด๋ฏธ์ง ํ์ผ์ด๋ค. ์ ฐ์ด๋๋ ๋ฌผ๊ฐ์ผ๋ก, ํ ์ค์ฒ๋ ์ค์ผ์น๋ ๋ฐ๊ทธ๋ฆผ์ผ๋ก ์ดํดํ๋ฉด ๋๋ค. ๋ฐ๊ทธ๋ฆผ์ด ๊ฐ์๋ ๋ฌผ๊ฐ์ ์ข ๋ฅ์ ๋ฐ๋ผ ํํ์ด ๋ฌ๋ผ์ง๋ค! ์ด ์ค ์๋ฒ ๋(Albedo)๋ ๋ฐ์ฌ์จ์ด๋ผ๋ ๋ป์ผ๋ก, ๋ฌผ์ฒด๊ฐ ์ด๋ค ์์ ๋ฐ์ฌํ ์ง๋ฅผ ๊ฒฐ์ ํ๋ค! C# ์คํฌ๋ฆฝํธ ์ด์ ๊ธฐ์ด์ ์ธ ์ฝ๋๋ค์ ์ดํด๋ณด์. void FixedUpdate() { if (Input.GetKey(KeyCode.UpArrow) == true) { playerRig..