Skip to content
Aside

객체 지향.

키워드:

class MyClass:

     pass

 

Maxima에 대한 소개

1982년에 처음 나왔던  Macsyma를 기반으로 개량된 기호 처리 가능한 수학 연산 프로그램입니다. 간단하고 뛰어난 2d, 3d 함수 그림 기능 때문에 처음 접했습니다.

사실 다른 상용 프로그램이 더 뛰어날 수도 있습니다. 그러나 Maxima는 GPL 하에서 무료로 배포되며, 경영학을 공부하는 사람에게는 충분하고도 남을 만큼 좋습니다. 데이터를 분석하거나 큰 숫자로 연산을 해야 할 필요가 있을 때도 Maxima는 좋은 성능을 보여줍니다.

Maxima 설치하기

Maxima를 설치하려면 

http://sourceforge.net/projects/maxima/

각자 환경에 맞는 파일을 받아 설치하면 됩니다.

[Java] final 키워드의 중요성

자바 프로그래밍을 할 때 사람들을 괴롭히는 한 가지 주제는 ‘메모리’이다. 관련된 주제는 가비지 컬렉션, Singleton 패턴 등이 있을테지만 흔히 간과하는 것 중 하나가 final 키워드의 사용이다.

우선 주요 특징부터 생각해보자.

첫째, final 키워드는 변수, 매쏘드의 선언에 쓰인다.

둘째, final 키워드를 사용한 변수는 상속이 안된다.

셋쩨, final 키워드로 할당한 변수를 변경할 수 없다.

넷째, final 키워드를 사용한 변수는 객체의 생성 당시에 메모리에 값이 할당되어야 한다.

변수가 한번만 선언된다는 것이 왜 중요한 것인지 이해하려면 자바에서 다루는 메모리 시스템에 대한 이해가 선행되어야 한다.

우선 변수를 하나 만들어 보자.

String _a = “Hi”;

변수 _a는 “Hi”라는 값을 가르키고 있다. 값을 저장하는 것이 아니라 ‘가리키는(reference)’ 것이다. 이 행동은 쉽게 다른 것들에 의해 복제될 수 있다.

String _b = “Hi”;

이제 _b도 “Hi”를 가르키고 있다. 또 다른 경우를 생각해보자.

SomeObject obj = new SomeObject();

obj 객체를 생성했다.

좌측은 obj 객체의 주소를 저장할 공간을 생성한 것이고, 오른편은 구체적인 값을 저장한 공간을 지정해 둔 것이다. 이들을 등호로 할당하여 값과 주소를 연결했다.

한편 시스템이 아주 복잡하게 움직인다고 하자(예를 들어 쓰레드가 1,000개 쯤). 우연치 않게 컴퓨터는 이런 말도 안되는 생각을 할 수 있다.

‘아… 값을 저장할 곳이 없네..’

우리도 도서관에서 누군가 책만 쌓아두고 쓰지 않으면 그 책을 치워버리고 그 자리에 앉고 싶어진다. 자바 가상 머신(컴퓨터)도 그러지 말라는 법이 없다.

SomeObject obj의 주소 값은 그대로 살아 있겠지만, obj가 가리키는 저장소가 사용되지 않는다고 판단된다면 이 저장소를 초기화시켜 버린다. 그러면 더 이상 obj는 값을 가리키지 못하는 상태 (한편, null을 가리킨다고 봐도 됨)가 된다.

그러면 이와 같은 웃긴 일도 벌어질 수 있다. 자바 프로그램의 쓰레드들이 축구를 하다가 갑자기 공이 사라지는 것이다. 왜냐하면 선수들이 전반전을 끝내고 휴식하는 사이, 축구공을 쓰지 않는다고 판단한 누군가가 공을 가져가 버렸기 때문이다.

어떻게 막을까? final 키워드를 붙여서 가리키는 주소와 값을 본드로 딱 붙여버리면 끝이다.

final SomeObject obj = new SomeObject();

어떤 일이 벌어지는고 하니 메모리를 생성한 이후, 이 메모리를 가리키는 주소값은 유일하게 obj가 관리한다. 다른 주소값을 가진 객체가 값을 저장하는 저장소에 접근하려고 하면 이미 obj가 버티고 있어서 막을 것이다. 결정적으로 이 obj 변수를 가지고 있는 객체가 가비지컬렉터에 의해 사라지기 전까지 obj가 가리키고 있는 저장소는 누구도 쓸 수 없다. 즉, obj가 사망해야 저장소도 풀려난다. 앞서 비유를 생각하면 축구가 끝나야 공이 다른 곳에 쓰일 수 있다.