인스턴스 (객체)
● 실제 클래스 기반으로 생성된 객체(인스턴스)는 각각 다른 멤버 변수 값을 가지게 된다
● new 키워드를 사용하여 인스턴스를 생성한다 ex) Student a = new Student();
참조변수
● 메모리에 생성된 인스턴스를 가리키는 변수
EX ) Student a =new Student();
참조 값
● 생성된 인스턴스의 메모리 주소값
기본 자료형 변수 vs 참조 자료형 변수
● 기본 자료형 변수
- byte(1byte) short(2byte) int(4byte) double(8byte) 등등
- 사용하는 메모리 크기가 정해져있다.
● 참조 자료형 변수
- String , File ,(사용자가 만든 참조 자료형) 등등
- 클래스에 따라 메모리 크기가 다르다.
(인스턴스를 사용하기 앞서 메모리에 대해 꾸준히 알아두는 편이 좋다.)
Stack(정적 메모리) 와 Heap (동적 메모리)
Stack (정적 메모리)
이 메모리에는 Main 함수 매개변수,Method 등 이 이 메모리에 쌓이게 된다.
스택은 LIFO(Last-in First-Out / 후입선출) 로 되어있기 때문에 나중에 쌓인 것이 먼저 빠져나오게 된다.
Heap (동적 메모리)
● 생성된 인스턴스(객체) [new 키워드]는 동작메모리인 Heap에 할당된다.
● 하나의 클래스로부터 여러개의 인스턴스가 생성되고 각각 다른 메모리 주소를 가지게 된다.
EX) Student a = new Student();
a.함수() <ㅡ메서드 불러오기
STACK HEAP
3. Method ㅡㅡㅡㅡㅡ↓ ⓛ a의 주소값을 찾아감 / ② 반환
2. a [주소값 등등] ㅡㅡㅡ> □ < 인스턴스(객체)주소 / 안에는 {속성, 메서드 등등포함}
1. MAIN함수
EX 2)
bus200이나 bus300은 쓰지 않았으니 제외하고 참조 변수인 bus100 과 student1의 take 메소드까지만 보도록 하자
● main함수 - 1. bus100, student1 ,student2이 stack에 쌓인다. / new키워드를 사용해 인스턴스 객체가 각각 heap에 할당
● method - 2. student1.take 매소드,매개변수 등이 stack에 쌓인다. / = student1의 인스턴스 객체가 있는 주소값을 찾아간다
● method - 3 bus.take 매소드,매개변수 등이 stack에 쌓인다 / = student1에서 bus100의 인스턴스 객체가 있는 주소값을 찾아간다.
● 4. bus.take 나머지 실행이 마치면 값을 반환하고 garbage collecter에 의해 pop이 동작 , stack에서 없어짐
● 5. student1.take의 나머지 실행을 마치면 studetn1으로 값을 반환하고 또다시 pop이 동작 ,stack 에서 없어짐
EX 3)
생성자
● 생성자는 일반 함수처럼 기능을 호출하는 것이 아닌, 객체를 생성하기 위해 new키워드와 함께 호출된다.
= 반환값이 없다
● 대부분 생성자는 외부에서 접근이 가능하나, 필요에 의해 private 접근제어방식으로 선언되는 경우도 있다.
● 생성자의 이름은 그 클래스 이름과 같아야 한다.
기본 생성자 (default constructor) 과 사용자 정의 생성자
● 기본 생성자는 만약 클래스 내에 생성자가 하나도 없을때 컴파일러가 기본생성자를 자동으로 코드를 넣어주게된다.
입력했을때 ㅡ> 생성자이름 () {}
사용자 정의 생성자
● 말마따나 사용자가 지정한 생성자이다.
● 만약 사용자 정의 생성자가 하나라도 있으면 컴파일러는 기본 생성자 코드를 넣어주지 않는다.
오버 로딩 (over loading)
● 생성자가 만약 같은 이름의 함수로 있을때 매개변수가 같다면 오류가 발생하게된다.
ex ) ① public Student (int x) {}
② public Student (int x) {}
따라서 같은 이름의 함수라면 매개변수를 다르게 지정 해주어야 한다.
ex ) ① public Student (int x) {}
② public Student (double x) {}
● 여러개의 생성자를 갖다 쓸 수 있게되어 편하다.
'JAVA' 카테고리의 다른 글
JAVA - this의 특징들 (0) | 2023.08.02 |
---|---|
JAVA - 접근 제어 방식 / getter 와 setter (0) | 2023.08.01 |
JAVA - 클래스 (0) | 2023.07.28 |
JAVA - Break문 vs Continue문 (0) | 2023.07.27 |
JAVA - 조건문(if), 반복문(for, while) (0) | 2023.07.27 |