기본형 : int long double boolean 처럼 변수에 사용할 값을 직접 넣을 수 있는 데이터 타입
참조형 : Student student, int[] students 와 같이 데이터에 접근하기 위한 참조를 저장하는 데이터 타입
참조형 변수는 참조값이 존재하는 위치를 저장한 변수
기본형은 들어있는 값을 그대로 계산에 사용할 수 있다.
참조형은 그대로 사용할 수 없다. 왜? 주소지만 가지고 있기때문에 주소지에 있는 변수에 까지 접근해야한다.
기본형은 연산 o 참조형은 연산 x
기본형을 제외한 나머지는 모두 참조형이고, 기본형은 타입이 모두 소문자로 시작한다. 자바가 기본으로 제공하는 타입
개발자가 새로 만들고 싶다면 Class를 통해서 구현하며 이것은 참조형이다.
String? 자바에서 String은 참조형이다. String은 대문자로 시작하기 때문에 클래스로 유추할 수 있다.
문자는 매우 자주 다루기 때문에 자바에서 특별하게 편의 기능을 제공한다.
String의 설명은 뒤에서 따로 설명 - Class 이며 참조형인것만 알고 넘어가자
자바의 참조형 = C언어의 포인터와 유사함
변수대입
대원칙 : 자바는 항상 변수의 값을 복사해서 대입한다. 중요
자바에서 변수에 값을 대입하는 것은 변수에 들어 있는 값을 복사해서 대입하는 것이다.
인스턴스를 가르키는 위치가 두개가 되는거지 안에 있는 값이 바뀌지는 않습니다.
메서드 호출
대원칙 : 자바는 항상 변수의 값을 복사해서 대입한다. 중요
메서드 호출도 마찬가지이다. 메서드를 호출할 때 사용하는 매개변수도 결국 변수일 뿐이다.
변수
멤버변수 : 클래스에 선언
지역변수 : 메서드에 선언, 매개변수도 지역 변수의 한 종류이다.
지역변수는 이름 그대로 특정 지역에서만 사용되는 변수라는 뜻이다.
main 메서드가 끝나면 제거된다. main이 끝나면 프로그램도 끝남.
멤버변수 : 인스턴스의 멤버변수는 인스턴스를 생성할 때 자동으로 초기화가 된다.
지역변수 : 항상 직접 초기화를 해줘야 한다. 수동 초기화
int = 0 / boolean = false / 참조형 = null
null
참조형 변수에는 항상 객체가 있는 위치를 가리키는 참조값이 들어가는데, 대상이 아직 없거나, 나중에 입력하고싶다면
null 이라는 특별한 값을 넣어둘 수 있다. 자바에서 null은 참조형에서만 사용이 가능하다.
GC - 가비지 컬렉터 / 아무도 참조하지 않는 인스턴스의 최후
DATA에 NULL 을 할당해서 앞서 생성한 인스턴스를 없애버렸을때.. 더 이상 찾을수가 없습니다.
주소가 사라졌습니다. 인스턴스는 용량만 사용되고 있을 것..
객체는 해당 객체를 참조하는 곳이 있으면 JVM이 종료할 때 까지 계속생존한다.
C와같은 과거 프로그래밍 언어는 개발자가 직접 명령어를 사용해서 인스턴스를 메모리에서 삭제해야 했다.
만약 실수로 인스턴스를 삭제하지 않으면 메모리가 가득해져 메모리 부족으로 오류가 발생한다.
GC - 가비지 컬렉터는 자동으로 사용하지 않는 메모리를 삭제를 시켜줍니다.
NullPointerException
택배를 보낼 때 주소지 없이 택배를 발송하면 어떤 문제가 발생할까? 참조값 없이 객체를 찾아가면,
NullPointerException 이라는 예외가 발생한다.
이름그대로 Null을 pointer(가르키다)했다. 즉 없는 값을 가르키기 때문에 발생하는 예외이다.
절차지향 객체지향
절차지향은 데이터와 해당 데이터에 대한 처리 방식이 분리되어 있다.
객체지향 에서는 게이터와 그 데이터에 대한 행동이 하나의 객체 안에 포함되어 있다.
지금까지 작성한 프로그램은 모두 절차지향 프로그램이다.
절차지향에서 객체지향으로 점진적으로 코드를 변경하면서 객체 지향 프로그래밍을 이해해보자
생성자가 왜 필요한가
생성자는 메서드와 비슷하지만 차이가 있다.
생성자는 반환 타입이 없다. 비워두어야 한다.
기본 생성자
매개변수가 없는 생성자를 기본 생성자라 한다.
클래스에 생성자가 하나도 없으면 텅빈 기본 생성자를 자동으로 만들어준다.
생성자가 하나라도 있으면 자동으로 기본 생성자를 만들지 않는다.
'BackEnd > Java' 카테고리의 다른 글
[Java] Optional(옵셔널) 이란? (0) | 2024.03.21 |
---|---|
[Java] Thread의 내부 생성자, 메소드 (0) | 2023.12.08 |
[Java] 김영한의 실전 자바 정리 2 - 패키지 ~ 메모리 구조와 static (1) | 2023.12.04 |
[Java] 클래스, 객체, 인스턴스 정리 (0) | 2023.11.30 |
[Java] CheckException 과 UncheckedException의 차이 (0) | 2023.09.04 |