Aliasing (Reference Variable)
๊ธฐ๋ณธ์ ์ผ๋ก, ์ฐ๋ฆฌ๊ฐ ์ ์ธ๋ ๋ณ์๋ฅผ ๋ค๋ฅธ ๋ณ์์ ํ ๋นํ๊ฒ ๋๋ฉด ์ด ๊ฐ์ ๋ณต์ฌํด์ ์ฌ์ฉํ๋ ์ ์ด ๋๋ค.
์์ ๊ฐ์ ๊ฒฝ์ฐ ๋ณต์ฌ๋ฅผ ํด์ ํ๋ก๊ทธ๋จ์ ์ง๋ ๊ฒ์ด ๋ฌธ์ ๊ฐ ์์ ์ ์์ง๋ง, ๊ตฌ์กฐ์ฒด๋ ๊ฐ์ฒด๊ฐ์ ๊ฒฝ์ฐ ๋ณต์ฌ๋ฅผ ํด์ ์ด๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ๋ ์ ์๋ค.
๋ํ, ํจ์์ ์ธ์๋ก ๊ฐ์ ๊ทธ๋ฅ ๋๊ฒจ์ค๋ค๋ฉด, ๊ทธ ํจ์ ๋ด์์๋ง ์ ์ธ๋๋ ์ง์ญ๋ณ์๋ค๋ง ๊ฐ์ง๊ณ ์ฅ๋์ ์น๊ฒ๋์ด, ๋ด๊ฐ ์ํ๋ ๊ฒฐ๊ณผ, ์๋ ๊ฐ ์์ฒด๋ฅผ ๊ฐ์ง๊ณ ๋ฐํํ๋ ๊ฒ, ์ด ๋์ถ๋์ง ์์ ์ ์๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ ๋ด๊ฐ ์ ์ฅํ ๊ฐ ์์ฒด๋ฅผ ๊ฐ๋ฆฌํฌ ํ์์ฑ์ด ์๊ธฐ๋๋ฐ, C์์๋ ์ด๊ฑธย Pointer
ย ๋ก ๊ฐ๋ฅํ๊ฒ ํ์๋ค.
ํ์ง๋ง ํฌ์ธํฐ์ ๋ฌธ์ ์ ๋๋ฌธ์, C++ ์ ์ฐธ์กฐ๋ณ์๋ผ๋ ์๋ก์ด ๊ฐ๋ ์ ๋์ ํ๋ค.
ํฌ์ธํฐ์ ์ฐธ์กฐ๋ณ์์ ์ฐจ์ด์ ๊ณผ ์ฅ๋จ์ ์ ๋ฐ์์ ๋ค๋ค๋ณด๋๋ก ํ๊ณ , ์ง๊ธ์ ์ฐธ์กฐ๋ณ์์ ๋ํด์ ์์๋ณด์.
๋ฐ์ย &r
ย ์ด ์ฐธ์กฐ ๋ณ์์ด๋ค. ์ ๋ ๊ฒ ํ ๊ฒฝ์ฐ r์ x๊ฐ ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ๊ณต๊ฐ์ ๋์์ ๊ฐ๋ฅดํค๋ ๋ณ์์ด๋ค.
์ฆ, x๊ฐ ๊ฐ๋ฆฌํค๋ 3์ย ๋ณ๋ช ย ์ด ์๊ฒผ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
Example
x ๊ฐ์ ๋ฐ๊ฟจ๋๋, r์๋ ๋ฐ๋ ๊ฐ์ด ๋ค์ด๊ฐ ๊ฒ์ ๋ณผ ์ ์๋ค. ๋ฐ๋๋ก y๋ 5๋ผ๋ ๊ฐ์ด ๊ทธ๋๋ก ๋ค์ด๊ฐ ์๋ค.
y๋ x๊ฐ์ ๋ณต์ฌํด์ ๋ฉ๋ชจ๋ฆฌ์ ๋ฃ์ ๊ฒ์ด๊ณ , r์ x์ ๋ฉ๋ชจ๋ฆฌ๊ณต๊ฐ์ ํจ๊ป ๋ปํ๊ณ ์์์ ์ ์ ์๋ค.
์ฌ๊ธฐ์ ์ฌ๋ฌ ํผ๋์ด ์ฌ ์ ์๋ค.
- C์์๋ย
&
ย ๋ ์ ์ฅ๋ ๊ฐ์ ์ฃผ์๋ฅผ ๋ถ๋ฌ์ค๋ ๋ฐฉ๋ฒ์ด์๋ค. ๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์๋ ์ฐธ์กฐ๋ณ์๋ผ๋ ๋ค๋ฅธ ์ด๋ฆ์ ๊ฐ์ ธ๋ค๊ฐ ์ฐ๊ณ ์๋ค. - ๊ฐ์ ๊ฐ์ ๊ฐ๋ฆฌํจ๋ค๋ ์ ์์ C์ธ์ด์์ Pointer ๊ฐ ์๊ฐ๋ฌ๋ค. ๊ทธ๋ฐ๋ฐ ์ ๋งคํ๊ฒ ๋ค๋ฅธ ์ ์ด ์๋ ๊ฒ ๊ฐ๋ค.
๊ตฌ์ฒด์ ์ผ๋ก ์ด๋ค์ ์ด ๋ค๋ฅผ๊น?
Comparision
์ฐธ์กฐ๋ณ์๋ ๋ด๊ฐ ์ ์ธํ ๊ฐ์ ๋์์ ๊ฐ๋ฆฌํจ๋ค๋ ์ ์์ ํฌ์ธํฐ์ ์ ์ฌํ ์ธก๋ฉด์ด ์๋ค.
๋ ํท๊ฐ๋ฆฌ๋ ์ ์, C์์ &์ ์ฌ์ฉ์, ๋ด๊ฐ ์ ์ฅํ ๋ณ์์ ์ฃผ์๊ฐ์ ๋ถ๋ฌ์ค๋ ์ฉ๋๋ก ์ฌ์ฉํ์๋ค.
๊ทธ๋ฐ๋ฐ C++์ ์์๋ ์ด๋ ์์ ์ฐธ์กฐ๋ณ์๋ก ์ฌ์ฉํ ์ ์๋ค๊ณ ํ๋ ์ฌ๊ฐ ํผ๋์ค๋ฌ์ด๊ฒ ์๋๋ค.
Difference between Pointer & Reference Variable
C์์ ํฌ์ธํฐ๋ ์ฅ๋จ์ ์ด ์์ฃผ ๋ช ํํ๋ค.
- ์ฅ์ ย : ๋ฉ๋ชจ๋ฆฌ์ ์ง์ ์ ์ผ๋ก ์ ๊ทผํ ์ ์๋ค.
- ๋จ์ ย : ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์์ ์ ํ์ด ์ง๋ฐฐ์ ์ด๋ค. ์ฆ, ์๋ฌด๋ ๊ฒ๋ ์ ๊ทผํ์ฌ ์๋ชป๋ ์ฃผ์๋ก ์ ๊ทผํ ์ ์๋ค๋ ์ํ์ฑ์ด ์๋ค.
ํฌ์ธํฐ์ ๋ฌธ์ ์ ์ ์ ์ธ๊ณผ ํ ๋น์ ๋๋๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ๋ค.
์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ ์ธ๊ณผ ํ ๋น์ ํด์ค๋ค.
์ด๋ฐ์์ผ๋ก ๊ฐ๋ฆฌํค๊ฒ ๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ฝ ๋ด๊ฐ ์ด๊ฒ๋ณด๋ค ๋ณต์กํ ๊ตฌ์กฐ์์ ํฌ์ธํฐ๋ฅผ ์๋ชป์ฌ์ฉํ๋ค๋ฉดย NULL
ย ๋๋ย Garbage
ย ๊ฐ์ด ๋ค์ด๊ฐ ์ํ์ด ์๋ค.
์ด๋ฐ ๋จ์ ์ ๋ณด์ํ๋ ๋ฐฉ์์ผ๋กย ์ฐธ์กฐ๋ณ์ย ๊ฐ ๋ง๋ค์ด์ก๋ค.
์ด๋ ๊ฒ ์ฌ์ฉํ ๊ฒฝ์ฐ
r์ x๋ฅผ ๊ฐ๋ฆฌํค๋ ๋๋ค๋ฅธ ๋ณ์นญ์ด ๋๋ค.
์ด๋ฐ์์ผ๋ก ๊ตฌ์ฑ๋๋ค. ์ฐธ์กฐ๋ณ์๋ ํฌ์ธํฐ์ ๋ค๋ฅด๊ฒ ์ ์ธ๊ณผ ํ ๋น์ด ๋ถ๋ฆฌ๋์ด์ ์ฌ์ฉ๋์ง ์๊ณ , ๋์์ ์ด๋ฃจ์ด์ ธ์ผ ํ๋ค.
์ฆ,ย ์ ์ธ๊ณผ ์ด๊ธฐํ๊ฐ ๋์์ ์ด๋ฃจ์ด์ง๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํฌ์ธํฐ์์ ๋ฐ์ํ๋ ์๋ชป๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ฌธ์ ์ ์ด ํด๊ฒฐ๋๋ค.
Summary
Pointer
- ์ ์ธ๊ณผ ํ ๋น์ด ๋ถ๋ฆฌ๋์ด ์ด๋ฃจ์ด์ง
- ์์ ๋กญ๊ฒ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํฌ ์ ์์ผ๋, ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ค๋ฅ ๋ฐ์ํ๋ฅ ์ด ๋์ (Null ๊ฐ)
- ์ ์ธ๊ณผ ํ ๋น์ด ๋ถ๋ฆฌ๋๋, ํฌ์ธํฐ ๋ณ์์์ ์ฃผ์๊ฐ์ ๋ฐ๊ฟ ์ ์์
- ํฌ์ธํฐ ๋ณ์์์๋ ํด๋น ๊ฐ์ฒด์ ์ฃผ์๊ฐ์ด ๋ค์ด๊ฐ์์
*
ย ๋ฅผ ์ฌ์ฉํด์ ์ ์ธํ๊ณ ์ฌ์ฉํจ
Reference Variable
- ์ ์ธ๊ณผ ํ ๋น์ด ๋์์ ์ด๋ฃจ์ด์ง
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํฌ์ธํฐ์ ๋นํด ์ค๋ฅ๊ฐ ๋ ํ๋ฅ ์ด ์ค์ด๋ฆ
- ๋ํ ์ ์ธ๊ณผ ํ ๋น์ดํ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํฌ ์ ์์
- ์ฐธ์กฐ๋ณ์๋ย
x
ย ๊ฐ ์์ฒด๋ฅผ ๊ฐ๋ฆฌํด x
ย ์ ๋ณ์นญ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋จ&
ย ์ ์ฌ์ฉํด์ ์ ์ธํ๊ณ ์ฌ์ฉํจ
์ฃผ์๋ฅผ ๊ฐ์ ธ์ค๋ & ์ ์ฐธ์กฐ๋ณ์์ &
C ์์ย scanf()
ย ๊ฐ์ ํจ์๋ฅผ ์ฌ์ฉํ ๋,ย &a
ย ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์
๋ ฅ์ ๋ฐ์๋ค.
์ด ๋, &๋ ๋ณ์์ ์ฃผ์๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ผ๋ก ์๊ฐํ๊ณ ์ฌ์ฉํ์๋ค.
๊ฐ์ &๋ฅผ ์ฐ๋ฉด์ ์ ํ๋๋ ์ฃผ์๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ผ๋ก, ๋ ์ฐธ์กฐ๋ณ์๋ผ๊ณ ๋ค๋ฅด๊ฒ ์๊ธฐํ๋ ๊ฑธ๊น?
์ฌ์ฉ๋ฒ์ 2๊ฐ์ง๊ฐ ์๋๋ฐ, ๊ตฌ์ฒด์ ์ผ๋ก ์์๋ณด๋ฉด ๊ต์ฅํ ๊ฐ๋จํจ์ ์ ์ ์๋ค. ์ฐจ๋ก์ฐจ๋ก ์์๋ณด์.
์ฃผ์๋ฅผ ๊ฐ์ ธ์ค๋ &
์ด ์ฝ๋๋ฅผ ๋ณด๋ฉด,ย a
ย ๋ย x
ย ์ ์ฃผ์๋ฅผ ๋ฐ์์ ์ ์ ์๋ค. ์ด๋ &์ ์ฐธ์กฐ๋ณ์๊ฐ ์๋๊ณ x์ ์ฃผ์๋ฅผ ๊ฐ์ ธ์จ๋ค.
"="
ย ์ฐ์ฐ์์ย ์ค๋ฅธ์ชฝย ์ ์๋ ๊ฒ์ ๊ธฐ์ตํ์.
์ฐธ์กฐ๋ณ์ &
c++ ์์ ์ฐธ์กฐ๋ณ์๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์ธ๊ณผ ์ด๊ธฐํ๋ฅผ ํ๋ค.
์ด๋ &๋ย =ย ์ฐ์ฐ์ย ์ผ์ชฝย ์ ์๋ค.
Summary
๊ฒฐ๊ตญ ์ฃผ์๋ฅผ ๊ฐ์ ธ์ฌ ๋ & ๋ย ์ค๋ฅธ์ชฝ ์ฐธ์กฐ๋ณ์๋ฅผ ์ฌ์ฉํ ๋๋ย ์ผ์ชฝย ์ ์๋ค.