๐คํ๋ก๊ทธ๋๋ฐ ์ธ์ด
[Kotlin/์ฝํ๋ฆฐ] Infix ํจ์ (Infix notation)
Infix ๋ ๊ฐ์ ๋ณ์ ์ฌ์ด์ ์ค๋ ํจ์ ์กฐ๊ฑด ๋ฉค๋ฒ ํจ์์ด๊ฑฐ๋ ํ์ฅ ํจ์์ฌ์ผ ํจ ํ๋์ ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ ธ์ผ ํจ ๊ธฐ๋ณธ ๊ฐ์ ๊ฐ์ง ์ ์์ผ๋ฉฐ varargs ์ฌ์ฉ ๋ถ๊ฐ ์์ 1 infix fun Int.shl(x: Int): Int { ... } // calling the function using the infix notation 1 shl 2 // is the same as 1.shl(2) ์์ 2 fun main() { infix fun Int.times(str: String) = str.repeat(this) // 1 println(2 times "Bye ") // 2 val pair = "Ferrari" to "Katrina" // 3 println(pair) infix fun String.onto(..
[Kotlin/์ฝํ๋ฆฐ] ํ์ ์ฒดํฌ, ์๋ ํ๋ณํ (Type checks and automatic casts)
is is ์ฐ์ฐ์๋ฅผ ํตํด ํ์ ์ฒดํฌ๋ฅผ ํ ์ ์๋ค. ๋ํ immutable ๋ก์ปฌ ๋ณ์(val)์ด๊ฑฐ๋ property๊ฐ ์ด๋ค ํ์ ์ธ์ง ํ์ธ๋์๋ค๋ฉด ์๋์ผ๋ก ํ ๋ณํ์ด ์ด๋ค์ง๋ค. ์์ 1 fun getStringLength(obj: Any): Int? { if (obj is String) { // 'obj' ๊ฐ String ํ์ ์์ด ํ์ธ๋จ. // `obj` ๋ฅผ String ํ์ ์ผ๋ก ์๋ ํ๋ณํ return obj.length } // `obj` ๊ฐ String ํ์ ์ด ์๋๋ผ๋ฉด ์ฌ์ ํ Any ํ์ return null } ์์ 2 !is๊ณผ ๊ฐ์ ํํ๋ก๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. fun getStringLength(obj: Any): Int? { if (obj !is String) return null // `obj` ..
C++ ์ ๋ฆฌ - 49 (copy(), ostream_iterator, istream_iterator, ๊ธฐํ ์ ์ฉํ ์ดํฐ๋ ์ดํฐ๋ค)
copy(), ostream_iterator, istream_iterator ํ๋์ ์ปจํ ์ด๋์์ ๋ค๋ฅธ ์ปจํ ์ด๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ copy()๋ผ๋ ์๊ณ ๋ฆฌ์ฆ์ด ์๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ดํฐ๋ ์ดํฐ๋ค๋ก ํํ๋๋ค. ex) int casts[10] = {6,7,2,9,4,11,8,7,10,5}; vector dice[10]; copy(casts,casts+10,dice.begin()); //๋ฐฐ์ด์ ๋ฐฑํฐ์ ๋ณต์ฌ copy() ํจ์๋ ๋ชฉ์ ์ง ์ปจํ ์ด๋์ ์๋ ๊ธฐ์กด์ ๋ฐ์ดํฐ ์์ ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชฉ์ ์ง ์ปจํ ์ด๋๋ ๋ณต์ฌ๋๋ ํจ์๋ค์ ์ ์ฅํ ์ ์์ ๋งํผ ์ถฉ๋ถํ ์ปค์ผ ํ๋ค. STL์ ostream_iterator ํ ํ๋ฆฟ์ ํตํด ์ถ๋ ฅ ์คํธ๋ฆผ์ ๋ํ๋ด๋ ์ดํฐ๋ ์ดํฐ๋ฅผ ์ ๊ณตํ๋ค. iterator ํค๋ ํ์ผ์ ํฌํจ์ํค๊ณ ๋ค์๊ณผ ๊ฐ์ด ์ ์ธํจ..
C++ ์ ๋ฆฌ - 48 (ํ์ค ํ ํ๋ฆฟ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ปจํ ์ด๋, ์๊ณ ๋ฆฌ์ฆ, ์ดํฐ๋ ์ดํฐ, ํจ์ ๊ฐ์ฒด, vector ํ ํ๋ฆฟ ํด๋์ค, Range์ ๊ธฐ์ดํ ๋ฃจํ(c++11))
ํ์ค ํ ํ๋ฆฟ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ค ํ ํ๋ฆฟ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(STL; Standard Template Library)๋ ์ปจํ ์ด๋, ์ดํฐ๋ ์ดํฐ, ํจ์ ๊ฐ์ฒด, ์๊ณ ๋ฆฌ์ฆ์ ๋ํ๋ด๋ ํ ํ๋ฆฟ๋ค์ ์งํฉ์ ์ ๊ณตํ๋ค. ์ปจํ ์ด๋๋, ๋ฐฐ์ด๊ณผ ๊ฐ์ด, ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ์ ์ฅํ ์ ์๋ ๊ตฌ์ฑ๋จ์์ด๋ค. STL ์ปจํ ์ด๋๋ ๊ฐ์ ์ข ๋ฅ์ ๊ฐ๋ค์ ์ ์ฅํ๋ค. ์๊ณ ๋ฆฌ์ฆ์, ๋ฐฐ์ด์ ์ ๋ฆฌํ๊ฑฐ๋ ๋ฆฌ์คํธ์์ ํน์ ๊ฐ์ ๊ฒ์ํ๋ ๊ฒ๊ณผ ๊ฐ์, ํน๋ณํ ์์ ๋ค์ ์ํํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ดํฐ๋ ์ดํฐ๋, ๋ฐฐ์ด ์์์ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์์น๋ฅผ ์ฎ๊ธฐ๋ฏ์ด, ์ปจํ ์ด๋ ์์์ ์์น๋ฅผ ์ฎ๊ธธ ์ ์๋๋ก ๋์์ฃผ๋ ๊ฐ์ฒด๋ค์ด๋ค. ํจ์ ๊ฐ์ฒด๋ ํจ์์ ๋น์ทํ ์ญํ ์ ํ๋ ๊ฐ์ฒด์ด๋ค. ํจ์ ๊ฐ์ฒด๋ ํด๋์ค ๊ฐ์ฒด์ผ ์๋ ์๊ณ , ํจ์ ํฌ์ธํฐ์ผ ์๋ ์๋ค. STL์ ์ฌ์ฉํ์ฌ ๋ฐฐ์ด, ํ, ๋ฆฌ์คํธ์..
C++ ์ ๋ฆฌ - 47 (์ค๋งํธ ํฌ์ธํฐ ํ ํ๋ฆฟ ํด๋์ค, auto_ptr ํ ํ๋ฆฟ, ์ค๋งํธ ํฌ์ธํฐ ๊ณ ๋ ค์ฌํญ, auto_ptr ๋ณด๋ค unique_ptr์ด ๋ ์ข์ ์ด์ , unique_ptr์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์ค๋งํธ ํฌ์ธํฐ ์ ํ)
์ค๋งํธ ํฌ์ธํฐ ํ ํ๋ฆฟ ํด๋์ค smart pointer๋ ํฌ์ธํฐ์ฒ๋ผ ํ๋ํ๋ ํด๋์ค ๊ฐ์ฒด์ง๋ง, ๋ช ๊ฐ์ง ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ง๋๋ค. ๋์ ๋ฉ๋ชจ๋ฆฌ ๋์ ์ ๊ด๋ฆฌํ๊ธฐ ์ํ ์ค๋งํธ ํฌ์ธํฐ ํ ํ๋ฆฟ์ ๋ํด ์์๋ณด์ ์ค๋งํธ ํฌ์ธํฐ์ ์ฌ์ฉ 3๊ฐ์ ์ค๋งํธ ํ ํ๋ฆฟ (auto_ptr, unique_ptr, shared_ptr)์ ๊ฐ๊ฐ new๋ฅผ ํตํด ์ป์ด์ง๋ ์ฃผ์๋ฅผ ๋์ ํ ํฌ์ธํฐ๋ฅผ ์ ์ํ๋ค. ์ค๋งํธ ํฌ์ธํฐ๊ฐ ์๋ช ์ ๋คํ์ ๋, ํ๊ดด์๋ delete๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ค. ๋ฐ๋ผ์ ๋ง์ผ new๊ฐ ๋ฆฌํดํ๋ ์ฃผ์๋ฅผ ์ ์ธ ๊ฐ์ ๊ฐ์ฒด ์ค ํ๋์ ๋์ ํ๊ฒ ๋๋ฉด, ๋์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ ํ์๊ฐ ์์ผ๋ฉฐ, ์ค๋งํธ ํฌ์ธํฐ ๊ฐ์ฒด๊ฐ ์๋ช ์ด ๋คํ์ ๋, ์๋์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋๋ค. ์ด๋ฌํ ์ค๋งํธ ํฌ์ธํฐ ๊ฐ์ฒด๋ค ์ค ํ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด์๋ ํ ํ๋ฆฟ์ ..
C++ ์ ๋ฆฌ - 46 (string : c++11 ์์ฑ์๋ค, string ํด๋์ค ์ ๋ ฅ, ๋ฌธ์์ด ์์ , ์ค๋ฒ ๋ก๋ฉ๋ find() ๋ฉ์๋)
-string : c++11 ์์ฑ์๋ค string(string && str) noexcept ์์ฑ์๋ str์ด ๋ฐ๋์ const๋ก ์ทจ๊ธ๋๋ ๊ฒ์ด ์๋๋ค. ์ด๋ฐ ํํ์ ์์ฑ์๋ฅผ ์ด๋ ์์ฑ์๋ผ ํ๋ค. ์ปดํ์ผ๋ฌ๋ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๋ณต์ฌ ์์ฑ์ ๋์ ์ ์ด๋ ์์ฑ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค. string(initializer_list il) ์์ฑ์๋ string ํด๋์ค์ ๋ฆฌ์คํธ ์ด๊ธฐํ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ค. string piano_man = {'L','i','s','z','t'}; string ํด๋์ค ์ ๋ ฅ c์คํ์ผ์ ๋ฌธ์์ด์ ๋ํด์๋ ์ธ ๊ฐ์ง ์ ๋ ฅ ์ต์ ์ ์ฌ์ฉํ ์ ์๋ค. char info[100]; cin>>info; //ํ ๋จ์ด๋ฅผ ์ฝ๋๋ค. cin.getline(info,100); //ํ ํ์ ์ฝ๋, \n์ ๋ด๋ฒ๋ฆฐ๋ค. cin.g..
C++ ์ ๋ฆฌ - 45 (RTTI, dynamic_cast ์ฐ์ฐ์, typeid ์ฐ์ฐ์์ type_info ํด๋์ค, ๋ฐ์ดํฐํ ๋ณํ ์ฐ์ฐ์, string ํด๋์ค)
RTTI RTTI๋ 'runtime type identification'์ ์ฝ์๋ก, ์คํ ์๊ฐ ๋ฐ์ดํฐํ ์ ๋ณด๋ผ๋ ๋ป์ด๋ค. RTTI์ ๋ชฉ์ ์ ํ๋ก๊ทธ๋จ์ด ์คํ ๋์ค์ ๊ฐ์ฒด์ ๋ฐ์ดํฐํ์ ๊ฒฐ์ ํ๋ ํ์ค ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ ๊ฒ์ด๋ค. RTTI์ ๋์ ๋ฐฉ์ c++๋ RTTI๋ฅผ ์ง์ํ๋ ์ธ ๊ฐ์ง ์์๋ฅผ ๊ฐ์ง๊ณ ์๋ค. dynamic_cast ์ฐ์ฐ์๋, ๊ฐ๋ฅํ๋ค๋ฉด ๊ธฐ์ด ํด๋์คํ์ ์ง์ํ๋ ํฌ์ธํฐ๋ก๋ถํฐ ํ์ ํด๋์คํ์ ์ง์ํ๋ ํฌ์ธํฐ๋ฅผ ์์ฑํ๋ค. ๊ฐ๋ฅํ์ง ์๋ค๋ฉด, ๋ ํฌ์ธํฐ์ธ 0์ ๋ฆฌํดํ๋ค. typeid ์ฐ์ฐ์๋ ์ด๋ค ๊ฐ์ฒด์ ์ ํํ ๋ฐ์ดํฐํ์ ์๋ณํ๋ ํ๋์ ๊ฐ์ ๋ฆฌํดํ๋ค. type_info ๊ตฌ์กฐ์ฒด๋ ์ด๋ค ํน๋ณํ ๋ฐ์ดํฐํ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค. RTTI๋ ๊ฐ์ ํจ์๋ค์ ๊ฐ์ง๊ณ ์๋ ํด๋์ค์ ๋ํด์๋ง ์ฌ์ฉํ ์ ์๋ค. -dyn..
C++ ์ ๋ฆฌ - 44 (exception ํด๋์ค, stdexcept ์์ธ ํด๋์ค, bad_alloc ์์ธ์ new, ์์ธ, ํด๋์ค, ์์, ์๋ชป๋ ์์ธ)
exception ํด๋์ค c++ ์์ธ๋ค์ ์ฃผ๋ชฉ์ ์, ์ค๋์์ ๋ฐฉ์งํ๋ ํ๋ก๊ทธ๋จ์ ์ค๊ณํ ์ ์๋๋ก ์ธ์ด ์ฐจ์์์ ์์ํ๋ ๊ฒ์ด๋ค. ์ต์ c++ ์ปดํ์ผ๋ฌ๋ค์ ์ธ์ด ์์ฒด์ ์์ธ๋ค์ ํฌํจ์ํค๊ณ ์๋ค. ์๋ฅผ ๋ค์ด, exception ํค๋ ํ์ผ์ ๋ค๋ฅธ ์์ธ ํด๋์ค๋ค์ ๊ธฐ์ด ํด๋์ค๋ก ์ฌ์ฉํ๋ exception ํด๋์ค๋ฅผ ์ ์ํ๋ค. ๋ํ ์ฌ์ฉ์๊ฐ ์์ฑํ๋ ์ฝ๋๋ exception ๊ฐ์ฒด๋ฅผ ๋ฐ์์ํค๊ฑฐ๋, exception ํด๋์ค๋ฅผ ๊ธฐ์ด ํด๋์ค๋ก ์ฌ์ฉํ ์ ์๋ค. what()์ด๋ผ๋ ํ๋์ ๊ฐ์ ๋ฉค๋ฒ ํจ์๊ฐ ์ฃผ์ด์ง๋ค. ๊ทธ๊ฒ์ ์์คํ ์ ํน์ฑ์ ๋ฐ๋ผ ํ๋์ ๋ฌธ์์ด์ ๋ฆฌํดํ๋ค. ๊ทธ๋ฌ๋, ์ด ๋ฉ์๋๋ ๊ฐ์์ด๊ธฐ ๋๋ฌธ์, exception ํด๋์ค๋ก๋ถํฐ ํ์๋ ํด๋์ค ์์์ ์ฌ์ ์ ํ ์ ์๋ค. #include class bad_hmea..
C++ ์ ๋ฆฌ - 43 (abort() ํธ์ถ, ์์ธ ๋ฉ์ปค๋์ฆ, ์์ธ๋ก ๊ฐ์ฒด ์ฌ์ฉํ๊ธฐ, c++11์์์ ์์ธ ๊ท๊ฒฉ, ์คํ ํ๊ธฐ, ์์ธ์ ๊ทธ ๋ฐ์ ๊ธฐ๋ฅ)
์์ธ abort() ํธ์ถ ํ ๋งค๊ฐ๋ณ์๊ฐ ๋ค๋ฅธ ํ ๋งค๊ฐ๋ณ์์ ๋ถ์ ์ด๋ฉด, ๊ทธ ํจ์๊ฐ abort() ํจ์๋ฅผ ํธ์ถํ๊ฒ ๋ง๋๋ ๊ฒ์ด๋ค. abort() ํจ์์ ์ํ์ cstdlib(๋๋ stdlib.h) ํค๋ ํ์ผ์ ๋ค์ด์๋ค. ์ผ๋ฐ์ ์ผ๋ก abort() ํจ์๋, ํธ์ถ๋์์ ๋ ํ์ค ์๋ฌ ์คํธ๋ฆผ (cerr๊ฐ ์ฌ์ฉํ๋ ์คํธ๋ฆผ)์ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ณ ํ๋ก๊ทธ๋จ์ ์ข ๋ฃ์ํค๋๋ก ๊ตฌํ๋์ด ์๋ค. ๋ํ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ ์ํด ๊ธฐ๋ ๋ ๊ฒฝ์ฐ, ๊ทธ ํ๋ก๊ทธ๋จ์ ๋ถ๋ชจ ํ๋ก์ธ์ค๋ ์ด์์ฒด์ ์ ์ปดํ์ผ๋ฌ์ ์ข ์์ ์ธ ์ด๋ค ๊ฐ์ ๋ฆฌํดํ๋ค. ์ด๋ abort()๊ฐ ํ์ผ ๋ฒํผ๋ฅผ ๋น์ฐ๋์ง ์ฌ๋ถ๋ c++ ์์คํ ๋ง๋ค ๋ค๋ฅด๋ค. ์ํ๋ค๋ฉด exit()๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ์ง ์๊ณ , ํ์ผ ๋ฒํผ๋ง ์ง์ธ ์ ์๋ค. ์์ธ ๋ฉ์ปค๋์ฆ ์์ธ๋ฅผ ๋ฐ์์ํจ๋ค. ํธ๋ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์..
C++ ์ ๋ฆฌ - 42 (ํ๋ ๋ ํด๋์ค, ํ๋ ๋ ๋ฉค๋ฒ ํจ์, ๋ดํฌ ํด๋์ค)
ํ๋ ๋ ํด๋์ค ๋ค์ ๊ตฌ๋ฌธ์ Remote๋ฅผ ํ๋ ๋ ํด๋์ค๋ก ๋ง๋ ๋ค. friend class Remote; ํ๋ ๋ ์ ์ธ์ public, private, protected ๋ถ๋ถ ์ด๋์๋ ๋ ์ ์๋ค. ํ๋ ๋ ๋ฉค๋ฒ ํจ์ ํด๋์ค ์ ์ฒด๋ฅผ ํ๋ ๋๋ก ๋ง๋๋ ๋์ , ์ํ๋ ๋ฉ์๋๋ค๋ง ๋ค๋ฅธ ํด๋์ค์ ๋ํด ํ๋ ๋๋ก ๋ง๋๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค. Remote::set_chan()์ Tv ํด๋์ค์ ๋ํด ํ๋ ๋๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์, Tv ํด๋์ค ์ ์ธ ์์ ๊ทธ๊ฒ์ ํ๋ ๋๋ก ์ ์ธํ๋ ๊ฒ. class Tv { friend void Remote::set_chan(Tv &t,int c); ... } ๊ทธ๋ฌ๋ ์ปดํ์ผ๋ฌ๊ฐ ์ด ๊ตฌ๋ฌธ์ ์ฒ๋ฆฌํ๋ ค๋ฉด Remote ์ ์๋ฅผ ๋ฏธ๋ฆฌ ์๊ณ ์์ด์ผ ํ๋ค. ์ฌ์ ์ ์ธ์ ์ฌ์ฉํด ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค. class Tv; ..