본문 바로가기
웹 프로그래밍(풀스택-->java)/웹프로그래밍(백엔드-->java)

48. 자바 프로젝트 만들기

by 백엔드개발자0107 2021. 12. 16.

스프링 기본 프로젝트 실습해보기

 

MainClass.java

package kr.co.softcampus.main;

import kr.co.softcampus.beans.HelloWorldEn;

public class MainClass {

	public static void main(String[] args) {
		
		new HelloWorldEn();
		
		
	}
	
}

HelloWorldEn.java

 

package kr.co.softcampus.beans;

public class HelloWorldEn {

	public void sayHello() {
		
		System.out.println("Hi~~~~");
		
	}
	
	
}

--> HelloWorldEn객체를  사용할려면 객체의 주소값을 가지고 있는 참조값을 가지고 있어야 할 것이다.

 

고로 참조값 HelloWorldEn을 만든다.

 

0. 정의

reference(참조)는 프로그램이 메모리나 다른 저장 공간에서 특정 변수의 값이나 레코드에 접근할 수 있도록 하는 값이다. 메모리 상의 객체의 주소 또는 참조값이 그 예시이다. object referenece(객체 참조)는 클래스로 만든 객체의 주소 또는 참조값에 해당한다. 객체(객체변수)는 기본 데이터 변수와 다르다. 객체 변수 선언 후 메모리를 생성(new 키워드 사용)해줘야 완전한 객체가 된다.

1. 객체참조의 과정

자바에서는 C언어와 다르게 메모리 상의 주소가 참조의 대상이 아니다. 자바에서는 객체의 주소 대신 참조값이라는 것을 할당받는다. 그런까닭에 자바에서의 객체 변수를 참조 변수(Reference Variable)라고 한다.

0) 기본

Student st1 = new Student();
Student st2 = new Student();

위의 st1과 st2는 Student의 객체 변수이자 Student의 인스턴스 참조 변수이다. st1과 st2에 객체 변수가 참조되는 과정은 아래와 같다.

1) 클래스 선언

public class Student {
	public int class;
    public int average;
}

2) 객체 변수 선언(메모리 생성 전이므로 null로 초기화)

Student st1 = null;
Student st2 = null;

3) 객체 변수에 대한 메모리 생성(by 키워드 new 클래스())

st1 = new Student();
st2 = new Student();

4) 메모리 생성 후

객체 변수에 대한 메모리가 생성되면 내부 인덱스 테이블에서 주소 매핑 후 참조값을 만들고 참조값은 참조 변수 st1과 st2에 할당된다.

  • 참조값은 객체 구분의 유일한 수단으로 가상머신(JVM)에서 자동으로 생성된다.
  • 참조값은 가상머신 내부에서 관리되며 노출되지 않는다.

2. 참조변수의 특징

1) 참조값(Reference Value)

참조값은 객체의 메모리를 생성했을 때 메모리와 연결된 유일한 숫자값을 말하며, 이 숫자값을 참조 변수가 받아 저장하는 것이다. 자바에서는 참조값을 가지고 있으면 해당 객체를 핸들할 수 있다. 참조값으로 작업하면 참조값과 매핑된 주소로 작업하는 것과 동일한 효과가 있다.
인스턴스를 하나 생성하면 1)참조값을 저장하기 위한 공간(객체 변수를 위한 공간)과 2)new 했을 때 힙영역에 생성되는 객체 자체의 공간이 만들어진다.

 

 

--> 만약에 클래스를 HelloWorldEn()이 아니라 HelloWorldKo()으로 변경한다면,

 

일단 클래스가 변경이 되었기 때문에 객체를 사용하는 클래스의 이름(뒤)이 변경되어야만 한다.

 

그리고 클래스가 변경되었기 때문에 객체의 주소값을 가지고있는 참조값을 선언(앞)하는 클래스의 이름도 변경해야만 한다.

 

그리고 메소드와 메소드의 매게변수도 전부다 수정해야만한다.

 

즉 기존의 클래스를 다른 클래스로 변경해야만 한다면,

 

우리가 이 클래스를 사용했던 모든 자바파일을 열어서 해당 자바파일을 모두 변경해야하는 번거로움이 있다.

 

--> 만약 프로젝트가 매우 커질경우 상당히 불편해지고 만약 이러한 클래스들을 자바프로젝트내에서 변경해야만 한다면 유지보수가 매우 불편해지는 경우가 생긴다.

 

학습정리 => 자바 프로젝트에서 클래스가 변경되면 객체 생성 부분과 참조 변수 선언 부분 모두를 수정해야 하는 매우 불편한 경우가 있다.