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) 매개변수의 갯수가 같고 데이터 유형이 같더라고 다른 유형의 순서로 선언된 경우..
		
		
	 */
}

이상으로 자바의 참조변수 와 데이터 타입에 대하여 알아보았습니다.

감사합니다.