getter ์ฝ๋ 2๊ฐ๋ค ๋์ผํ๊ฒ ์๋ํ ๊น์? (์ฝ๋ ์ฒจ๋ถ)
์๋ฐํ ๋ค๋ฆ
๋๋ค.์ผ๋จ ๋ฆฌํด๊ฐ์ด ๋ค๋ฆ
๋๋ค. getX๋ ๋จ์ํ int ๋ฅผ ๋ฆฌํดํ๊ธฐ ๋๋ฌธ์, x์ ๊ฐ๋ง์ ๋ฆฌํดํฉ๋๋ค. (r-value ๋ฅผ ๋ฆฌํดํ๊ธฐ ๋๋ฌธ์, ์ฃผ์๊ฐ์ ํ์ธํด๋ณด๊ณ ์ถ์ด๋ ํจ์ ๋ฐ์์๋ ์ด๋ฅผ ์๋ํ ์ ์์ต๋๋ค.) ํ์ง๋ง getX2๋ const int& ๋ฅผ ๋ฆฌํดํ๊ธฐ ๋๋ฌธ์ ์ฐธ์กฐ๋ณ์, ์ฝ๊ฒ ๋งํด์ ํด๋์ค์ ์ ์ธ๋ int x์ ์ฃผ์๋ ๋์ผํ๊ณ ๊ฐ๋ ๋์ผํ ๊ฐ์ฒด๊ฐ ๋ฆฌํด๋ฉ๋๋ค. ๋ฐ๋ผ์ ํจ์ ๋ฐ์์ ๋ฆฌํด๊ฐ์ ์ฃผ์๋ฅผ ์ฐ์ด๋ณด๋ฉด ํด๋์ค ๋ด๋ถ์ x์ ์ฃผ์๋ ๊ฐ๋ ๋์ผํ๊ฒ ์ถ๋ ฅ๋ฉ๋๋ค. ๋จ, const๊ฐ ๋ถ์๊ธฐ ๋๋ฌธ์ ์ด ๋ฆฌํด๊ฐ์ ๋์
์ ํ๋ ์ฐ์ฐ์ ์ปดํ์ผ์ด ์ ๋ฉ๋๋ค. (ํจ์ ์ ์ ์์์ const๋ฅผ ๋บ๋ค๋ฉด ๋์
๋ ๊ฐ๋ฅํฉ๋๋ค. ์๋ฅผ๋ค์ด, point.getX2() = 5; -> ์ด๋ ๊ฒ ํ๊ณ std::cout ์ ํด๋ณด๋ฉด 5๊ฐ ๋์ต๋๋ค.) ๋ค์์ผ๋ก๋ ํจ์ ์ด๋ฆ ๋ค์์ ๋ถ์ const ํค์๋ ๋๋ฌธ์ ๋ค๋ฆ
๋๋ค. member function ์์ ๋งค๊ฐ๋ณ์() ์ ๊ตฌํ {} ์ฌ์ด์ const ํค์๋๊ฐ ๋ถ์ด์์ ๊ฒฝ์ฐ, ํด๋์ค๊ฐ const๋ก ์ ์ธ๋์๊ฑฐ๋ ๋ฆฌํด ๊ฐ์ const ์ ์ธ๋ ๋ณ์๋ก ๋ฐ๋ ๊ฒฝ์ฐ์ ํธ์ถ๋ฉ๋๋ค. ๋ง์ฝ const ํค์๋๋ฅผ ๋ถ์ด์ง ์๊ณ ํ๋์ ํจ์๋ง ๊ตฌํํด ๋์๋ค๋ฉด, ์์ ๊ฐ์ ์ํฉ์ผ ๊ฒฝ์ฐ ์ปดํ์ผ์ด ์ ๋ฉ๋๋ค.๋, ์ง๋ฌธ์๊ป์ ์์ฑํ์ ์ฝ๋์์๋ ๋ ํจ์๊ฐ ๋งค๊ฐ๋ณ์๊ฐ ์๋ ๊ฒ์ ๊ฐ์ง๋ง, ๋ค์ const ํค์๋๋ก ๊ตฌ๋ณ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ํจ์ ์ด๋ฆ์ ๊ฐ๊ฒ ๋๊ณ ์ค๋ฒ๋ก๋ฉ์ ํ์ค ์ ์์ต๋๋ค. ์ ๊ฐ main ํจ์๋ฅผ ํ๋ ๋ง๋ค์ด๋ดค์ต๋๋ค. getX ์ ๋ค๋ก ๋ฆฌํด๊ฐ๊ณผ const ๋ฅผ ๋ณํ์ํค๋ฉด์ ํ์ธํด๋ณด์ธ์!#include //-std=c++11 class Point { //๋ด๋ถ ์ฃผ์ ๊ฒ์ ํธ๋ฆฌํ๋๋ก public์ผ๋ก ๋ณ๊ฒฝ public: int x; int y; public: Point(int i = 0, int j = 0) : x(i), y(j) {} int getX() const { std::cout x x ์ด ํจ์๊ฐ ํธ์ถ๋๊ธฐ ๋๋ฌธ์ &(P2.getX()) ๋ฅผ ํด๋ณผ ์ ์์.(compile error) //std::cout P1.getX() : 123(normal) 123 Address of P1.getX() : 123(normal) 0x7ff7bd9ad750 Address of P1.x : 0x7ff7bd9ad750 P2.getX() : 12(const) 12์์ ์ฝ๋ ๊ทธ๋๋ก ์คํํ ๊ฒฐ๊ณผ์
๋๋ค.์ถ๋ ฅ๋ฌผ์ด ๋ง์ ์กฐ๊ธ ์ด์ง๋ฝ์ง๋ง, ํ์คํ๊ฒ const์ ์ผ๋ฐ ํจ์๊ฐ ์ธ์ ํธ์ถ๋๋์ง ๋ณผ ์ ์์ต๋๋ค. ๋น๊ตํด๋ณด์ธ์ฉ