[Java] 6. 객체 소개(2)

2023. 9. 15. 01:00Java언어 공부

값 타입과 참조 타입

 

값 타입 : 변수 위치에 값 자체를 유지하는 타입 (원시 타입 - 정수, 부동 소수 등등)

참조 타입 : 변수 위치에 값이 저장된 위치 정보를 유지하는 타입 (복합 타입 - 문자열, 배열, 구조체 등)

 

자바의 원시타입

 

boolean : 1byte이다. (true, false)char : 2byte 이다 => C를 개발했을 때의 ASCII가 아닌 unicode를 사용하기 떄문이다.byte : 1byte이다. (정수)short : 2byte이다. (정수)int : 4byte이다. (정수) => 컴퓨팅 환경에 달라질 수 있다 (C/C++에서만). 하지만 자바는 고정된 크기를 사용한다.long : 8byte이다. (정수)float : 4byte이다. (실수)double : 4byte이다. (실수)

 

자바는 그리고 unsigned를 사용하지 않는다. (char 뺴고)

 

변수의 가시영역과 수명

 

가시 영역 : 선언 된 변수를 프로그래밍에서 사용할 수 있는 영역

수명 : 해당 변수가 메모리에 공간을 차지하고 실제 사용하는 기간

 

멤버 변수는 가시영역이 클래스이며 객체가 살아있는 동안의 수명을 갖고 있다. 또한 자동으로 초기화 된다.

(자동으로 초기화라는 말은 int의 경우 0, 부동 소수는 0.0, boolean은 false가 되는 등,

하지만 자동 초기화는 바람직하지 않음)

 

지역 변수는 가시영역이 블록이며, 함수의 수명에 따른다. 또한 프로그래머가 반드시 초기화 해줘야 된다.

 

지역 변수와 멤버 변수의 이름이 같으며, 가시 영역이 중첩되면, 더 작은 것으로 선정된다.

2개의 지역 변수가 가시영역이 중첩되면 문법 오류이다.

 

지역 변수 유추

 

C+에는 auto라는 키워드가 있으면, 자바에는 var라는 타입을 유추할 수 있는 기능이 있다. (키워드 아님)

 

var age=20; 같이 코드를 작성하면

20이라는 초깃값을 이용하여 컴파일 시간에 타입을 유추한다.

 

초깃값으로 null을 사용할 수 없고, 복합 선언도 가능하지 않다.

 

객체의 생성

 

객체를 생성할 때는 new라는 키워드를 사용한다.

 

셍성자 : 객체를 초기화하기 위해 사용하는 메소드로, 메소드 이름이 클래스 이름이랑 같다.

생성자를 여러 개 정의 할 수 있음 => 다중정의

 

-객체를 생성하는 다른 방법들

 문자열은 new을 사용하지 않고 생성할 수 있음.

 객체를 생성하는 메소드를 사용하여 생성하는 방법이 있다.

  clone 메소드를 사용하여 생성하는 방법이 있다.

 

쓰레기 수집

 

new 연산자를 이용하여 생성한 객체가 위치하는 메모리 공간을 쓰레기 수집가능 힙이라고 한다.

 

이유?

힙에 할당된 공간을 가리키고 있는 참조 변수가 더 이상 없으면 쓰레기가 되며, JVM이 자동으로 반납함.

=> delete를 사용하지 않는다.

 

객체 사용하기

'.' 연산자를 이용하여 객체의 메소드에 접근한다.

 

생성자

 

생성자의 종류는 두 가지로 나뉜다.

 

- 기본 생성자 : 매개 변수를 하나도 사용하지 않는 생성자를 말하며,

생성자를 정의 하지 않을 시 자동으로 만들어준다.

 

- 복사 생성자 : 매개변수로 같은 클래스 타입의 객체를 받아 객체와 동일한 내부 상태를

가지는 개체를 생성해주는 생성자

C+에서는 사용하지만 자바에서는 참조 타입을 활용하기 때문에 사용 안함.

 

기본 생성자가 아닌 다른 생성자가 정의 되어 있으면, 기본 생성자를 제공해주지 않는다.

 

다중 정의 규칙

 

다중 정의 : 한 클래스 내에  같은 이름의 메소드를 여러 개 정의하는 것

 

-규칙

1. 매개 변수의 수와 타입을 구분한다.

2. 반환 타입은 구분에 사용하지 않는다.

3, 호출할 메소드를 선택할 때에는 정확하게 일치하는 타입이 우선

4. 정확하게 일치하는 타입이 없으면 해당 타입을 수용할 수 있는 가장 작은 타입