Java
eclipse / 자바의 참조 변수 와 데이터 타입
bokboks
2023. 3. 17. 23:49
안녕하세요
이전엔 자바에서의 반복문 중 하나인 while , do-while문을 알아보았는데요
이번 포스팅에서는 자바의 참조변수 와 데이터 타입에 대하여 알아보겠습니다.
eclipse / while ,do while 문
안녕하세요 오늘은 이전에 다룬 자바의 이중 반복문 이후에 자바에서의 또 다른 반복문인 while 과 do while 문에 대해 알아보겠습니다. eclipse / 자바 이중 반복문 안녕하세요 이번 포스팅에선 이전
stackbok.tistory.com
package javaexp.a05_reference;
public class A01_Basic {
public static void main(String[] args) {
/*
# 참조변수
1. 자바에서 가장 많이 활용되는 메모리 stack영역과
heap영역이 있다.
(stack) [ ]
[ heap ]
[ ]
ef) 기본데이터 유형을 stack에 선언과 할당.
객체(배열,객체, 인터페이스..)을 사용하는 메모리 비유
도서관의 책을 찾는 단말기 - stack, 실제 책이 있는 곳은 heap 영역
책이 있는 위치를 가르켜준다
2.stack영역에는 기본 타입유형이 바로 할당되는데,
그외 배열, 열거, 객체, 인터페이스 유형은 heap영역에
할당되고, stack영역에 주소값을 할당하여 사용한다.
3. 이 때, 객체 유형은 heap영역을 참조한다는 개념으로 참조
타입이라고 사용한다. 이런 변수를 참조변수라고 한다.
배열, 열거, 객체, 인터페이스는 실제 할당된 메모리는 heap 영역이고,
stack영역에서는 할당된 heap영역의 주소값을 가지고 있기에 참조라는
개념으로 참조변수를 사용한다.
# 데이터 타입의 분류
1. 기본타입
정수,실수,논리 타입
2. 참조타입
배열,열거,클래스,인터페이스.
# 변수의 메모리 사용
1.기본타입
할당할 데이터를 변수 안에 저장한다.
stack영역에 데이터를 바로 저장
2.참조타입 변수
할당할 데이터를 변수 안에 주소로 저장한다.
heap영역의 데이터를 주소값으로 stack영역에 할당 저장.
*/
/*
int num01 = 25;
int num02 = 25;
System.out.println("stack영역에 할당된 데이터: "+num01);
Person p01 = new Person();
Person p02 = new Person(); //p01 참조변수
//new 쓰는순간에 새로운객체를 다른위치에서 생성
//객체가 생성되는순간 다르다 객체는 힙영역을쓰고 있기에
System.out.println("stack영역 할당된 참조변수의 데이터: "+p01);
System.out.println("stack영역 할당된 참조변수의 데이터: "+p02);//p01과 값이 다르다
System.out.println(num01==num02);
//특정객체는 참조변수를 통해서 해당 객체의 위치를 찾아가서
//가지고 있는 속성값으로 접근하여 데이터를 활용한다.
System.out.println("객체의 데이터 활용: "+p02.name);
//p02라는 참조변수변수를 통해서 해당 객체의 heap영역의 위치를 찾아가서
* p02.name 이라는 객체의 소속된 속성 접근하여 그속성이 가지고 있는 데이터를 출력한다.
*
System.out.println("객체의 데이터 활용: "+p02.age);
System.out.println(p01==p02);
Person p03 = p01; //p03이라는 stack영역에 메모리에 p01주소값을 할당.
System.out.println(p01 == p03);
//ㄴ>결과 : javaexp.a05_reference.Person@24d46ca6
//ㄴ> 패키지명.객체명 @heap영역의 주소값(16진수)
//ㄴ> JVM 에서 힙영역 주소값을 나타내는것 (도서관 단말기 예시)
*/
//ex1) Product를 통해서 prod01 과 prod02 객체를 생성하고 주소값을 비교
Product prod01 = new Product();
Product prod02 = new Product();
System.out.println("주소값 비교: "+(prod01 == prod02));
//ex2) prod03을 선언하고 prod01에서 할당하고, prod01과 prod03를 비교
Product prod03 = prod01;//참조주소를 할당.
System.out.println("주소값 비교2: "+(prod01 == prod03));
//ex3) prod01,02,03의 heap영역의 주소값을 출력..
System.out.println("# 주소값 확인 #");
System.out.println(prod01);
System.out.println(prod02);
System.out.println(prod03);
//할당되지않을때 null로 표시
ExamPerson p01 = new ExamPerson();
// 사용자 정의 생성자를 선언하는 순간 default생성자는 사라진다
ExamPerson p02 = new ExamPerson("홍길동");
ExamPerson p03 = new ExamPerson(25);//식별이가능
ExamPerson p04 = new ExamPerson((byte)25);
}
}
class Product{
}
class Person{
/*객체를 만들기 위한 코드(클래스) 클래스와 객체는 다름
비유 클래스와 객체 차이
* 63빌딩 도면가지고 부산에 만들면 똑같은게 생김? 생김
* 제주도에 만들면? 생긴다
* 63빌딩의 도면역할을 하는게 클래스
* 이로인해 실체로 나온 내용은 객체
*
* 클래스 P= 도면 , 객체 = 이 도면을 통해서
* JVM에서 실제 메모리를 할당하고 만들어 사용 할수있는것을 말한다.
*/
String name="홍길동";
int age = 25;
}
class ExamPerson{
ExamPerson(){}
//Persin(){} 컴파일시 자동으로 생성자가 선언되지 않으면 만들어진다.
ExamPerson(String name) {}
ExamPerson(int age) {} //같은 타입은 식별이 어렵다
ExamPerson(byte age) {}
ExamPerson(String name, int age) {}
ExamPerson(int age , String name) {}
// ㄴ> 4)예시 조삼모사 선언위치가(순서) 다르면 식별ok
/*
*
#오버로딩
1.생성자나 메서드에 동일한 이름으로도 선언하여 사용할 수 있는 선언 규칙을 말한다.
1) 궁극적인 핵심 원리는 이 내용을 호출하는 곳에서 매개변수로 식별할 수 있을때
선언이 가능하다.
2) 매개변수의 갯수가 다를 때
3) 매개변수의 갯수가 같더라도 데이터 유형이 다를 때
4) 매개변수의 갯수가 같고 데이터 유형이 같더라고 다른 유형의 순서로 선언된 경우..
*/
}
이상으로 자바의 참조변수 와 데이터 타입에 대하여 알아보았습니다.
감사합니다.