본문 바로가기
코스웨어/11년 내장형하드웨어

[내장형]윤병도-20111208일일보고서

by 알 수 없는 사용자 2011. 12. 8.
728x90
반응형
*기본자료형의 변수와 객체 참조변수
기본자료형은 우리가 잘 알고 있는 정수형, 실수형등의 변수와 동일하고 객체 참조변수는 객체를 저장하는 것이 아니라  객체를 가리키는 참조(reference)로서, 실제의 객체가 들어있는 메모리의 주소를 가진다

*garbage collection
객체 참조변수가 원래 가리키던 객체가 아닌 다른 객체를 가리키게 될때 그 전의 객체에 접근 할 수 있는 방법이 없다  ( 즉 쓸모가 없어짐) 이럴때 c++에서는 free를 이용해서 풀어줘야 하지만 자바는 자바가상기계가 시간이 날때 위의 메모리를 한번에 풀어준다  위와 같은 메모리관리를 자바의 garbage collection이라 한다
객체가 담겨있는 메모리 블록의 헤드에 카운터가 있어서 메모리블록을 가리키는  참조변수의 숫자가 기록되어 있다가 그 값이 0이 되면  garbage collection의 대상이 된다

*자바가상머신의 다운
자바 가상머신은 하나의 어플이고 실행시 필요한 만큼 메모리를 확보하고 실행한다
만약 jvm이 다운되어서 관련된 프로그램에 문제가 생겨도 jvm이 돌고있는 실질적인 운영체제에 직접적인 영향이 없으므로 안정성을 확보 할 수 있다 ( 휴대폰에서 java 타입을 선호하는 이유)

*래퍼 클래스로 선언한 기본형
int iNum과 Integer iNum1은 다르다
iNum1은 객체 참조변수가 되는 것이므로 new로 객체를 생성해야 한다
만약 다음과 같이 생성하면 먼저 객체가 생성되고 그 곳에 3이라는 값이 복사되어 들어갔다고 봐야 한다
(복사생성자와 유사)
Integer iNum1 = 3;

*메시지와 메소드
객체지향 프로그램의 실행은 객체들 간의 메세지 교환으로 이루어 진다.
메시지를 받아서 기능을 수행(함수 실행등)하는 객체를 수신자, 메시지를 보내는 객체를 송신자라 한다 (main처럼 static class에서 보내기도 한다)
자바에서 메세지의 전달은 메소드의 호출을 통해서 이루어진다

*main클래스에서의 메시지 전달
일반적으로 main() 메소드는 메세지 전송을 시작하는 역할만을 담당하는 독립적인 클래스에 정의되는 것이 프로그램을 객체지향적으로 작성하는 데 바람직하다.

*객체 지향적인 프로그램
우리가 객체 지향적인 프로그램을 작성할때 interface 객체와 직접 실행을 담당하는 객체로 나누어서 설계하고 프로그램을 짠다
도서관리를 예로 들면 도서에 관한 정보를 입력받고 알려주는 객체와 정보를 저장하고 갱신하는 db객체를 만들어서 
프로그램이 실행될때  두 객체사이에 서로 메시지를 주고 받게 디자인하면 된다 

*인수 전달 기법
아래의 소스를 보자

위에서 After call squareNumber에서  threeA를 출력시 10이 나오는 것은 인수로 전달된 객체 참조 변수
(객체 참조변수의 복사가 일어남)가 처음에는 같은 객체를 가리키고 있다가 squareNumber함수내에서 새로운 객체를 가리키게 된  후 그 가리키는 주소에 어떤 변화를 가해도 원본주소에는 어떤 변화도 일어나지 않기 때문이다 


728x90