항목 17에서 객체의 생명주기와 예외의 관련성에 대해서 이야기 했다면, 이번 항목에서는 객체 생성자에서 발생된 예외는 어떻게 진행되며, 어떻게 처리 해야 좋을 지에 대한 고민을 하는 항목이다. 질문 1. 항목 17의 예제 1에서 A나 B의 생성자가 예외를 발생시키면 C의 생성자가 그 예외를 흡수해서 예외를 아예 발생하지 않게 하는 것이 가능한가? 예와 함께 왜 이런 식으로 되었는지에 대한 근거를 제시하라. 질문 2. C의 생성자(들)에 안전하게 빈 throw 정의를 넣을 수 있도록 A와 B가 지켜야 하는 최소한의 요건은 무엇인가? 해설 질문 1. 해당 질문에 답하기 위해선 표준 예외 발생에 대한 규정을 알고 있어야 할 듯 싶어, 책에서 몇가지 규칙을 설명해 준다. 1. 핸들러가 단순히 'return;' ..
전체 글 검색 결과
사냥하고 요리했으면 먹는 일만 남았다. 문장 자체는 다른 언어와 비슷 하니 쉽게 설명 되어 진다. 문장으로는 배정문과 제어문, 프로시저 호출문이 있으며, 특이하게 다중 배정문과 지역변수 선언문이 있다. 배정문(assignment) 예제코드 : http://www.lua.org/pil/4.1.html 변수에 값을 배정하는 문을 뜻한다. 방법은 a = 1 처럼 사용 한다. 다중 배정문 a,b = 1,2 형태로 사용 된다. 일반적으로 이렇게 안쓰지만, 함수의 반환값이 두개 이상의 값을 반환 할 때 쓰곤 한다고 필자는 말하고 있다. 여기서 잠깐, 배정문을 쓰지 않고 사용된 변수에는 기본적으로 nil값이 들어 가며, 다중 배정문시 a,b,c = 1,2 일 때 c 는 nil 값이 들어가고 a,b = 1,2,3 일 ..
타입 개념을 사냥했으니, 이제 수식 개념을 요리하자. 변수를 어떻게 사용 할지는 수식으로 결정짓기 때문에, 반드시 요리해야 한다. 루아는 산술 연산자 관계 연산자 논리 연산자 문자열 병합 연산자 연산자 우선순위 테이블 생성자 를 가지고 있다. 산술연산자 말그대로 산술연산을 지원하며, 추가적으로 나머지 연산자( % ) 연산자를 지원한다. 그리고 단항연산자로 '-' 연산자가 있다. 바로 부호를 바꾸어 주는 연산자이다. 나머지 연산자는 5.1 이상 부터 된다고 하니, 유념하자. 즉, + - * / % - 가 지원 된다. 관계 연산자 관계 연산자는 ture false 를 반환하는 연산자 이다. 지원 되는건 = == ~= 인데, ~= 는 C 에서 처럼 != 과 동일 하다. 문자와 숫자에 대한 비교는 허용치..
아마도 언어를 배움에 있어, 제일 먼저 알아야 하는 것은 그 언어가 지원하는 타입을 먼저 알아야 할 것이다. 조사, 동사, 명사.. 처럼은 아니구나... 컴퓨터 언어로 국한 될 듯 싶다. : ) C와 다르게 루아는 동적 타입 지정 언어이다. PHP와 비교한다면 변수의 선언 없이 그냥 쓰면 되는 점이 똑같다. 쉽게 풀어 보면, "타입 자체에는 의미를 두지마, 변수 자체에 의미를 두라구! 변수가 있기에 타입이 있는 거라구!" 란 개념으로 정리가 된다. 그래도 타입이 어떤게있는지 정도는 알아야 한다.^^; 왜냐하면 컴퓨터 언어에서는 최소한 숫자형과 문자형은 구분짓기 때문이다. : ) 루아에는 총 8가지의 타입이 있다. nil : 닐 타입 C언어의 NULL 과 비슷하다. DB의 null 과 비슷하다. numbe..
루아는 애초에 다른 언어에서 동작 될 수 있도록 개발 되었기 때문에, 확장성이 어마어마하다고 한다. 이는 접착 언어(glue language)로 괜찮은 평가를 받고 있는 증거이다. 어디에 쓸까? 응용할 수 있는 부분은 "알고리즘" 부분이라고 생각한다. 프로그램 생명 주기 동안, 알고리즘이 개선 되었을 때, 재컴파일 하지 않고, 스크립트만 바꾸어 주면 되기 때문이다. 게임을 예로 들자면, 여러 공식들이 있을 것이다. (아직 써보진 안아서 이거 밖에는 모르겠다.) 이는 개발 중 시간을 많이 아낄 수 있음을 보여주며, 이렇게 벌어둔 시간으로 "최적화"를 지연평가(ㅋㅋ)하여, "설계"에 몰두할 수 있는 장점을 지닐 수 있게 된다. 이번에 맡은 프로젝트로 인하여 시작하게 되었는데, ... 뒤로 미루고 미루고 미루..
이번 항목은 생성자에서 어떻게 예외가 발생 될 수 있으며, 생성자에서 예외가 발생한것이 어떤 의미인지 살펴 보는 항목이다. 예제 코드 // 예제 1 class C : private A { B b; }; // 예제 2 { C c; } 질문 1. 예제 1에서 생성자에서 예외가 발생하면 어떻게 잡을 수 있을까? 질문 2. 예제 2에서 객체의 수명을 설명 할 수 있는가? 해설 1. 예외 발생 어떻게 잡을 수 있는가? 질문에 대해서만 답하자면, 예외를 잡기 위해서 try catch 문을 사용 해야 할것이다. 코드로 옮기자면, // 예제 1 class C : private A { public: ~C() { } C() try : A() , b() { } catch( ... ) { } private: B b; }; 이..
최근댓글