본문 바로가기
Java

JAVA 메소드가 호출->실행 될때 메모리의 상태 / 접근제어자 / 클래스의 멤버변수 데이터를 셋팅하는 방법3가지 / 멤버변수와 로컬변수의 차이점

by leopard4 2023. 1. 19.

 

함수가 호출 실행될때 메모리의 상태

src 폴더의 구조를 보자

패키지(폴더같은것)가 2개 data, main

패키지별로 파일이 1개씩 있다. Member, AccessMain

 

data 패키지 안의 Member 클래스를

main 패키지 안에 AccessMain 에서 호출했을때 

public을 사용하지 않았다면 패키지가 다르므로 호출할수가없다.

이런게 접근제어자 라고하는것인데

접근제어자를 아무것도 설정하지않았다면

디폴트 접근제어자라고 하고 이는 같은 패키지 내에서는 정상작동하지만

패키지가 다르면 작동하지않는다.

멤버변수는 간단히 얘기하면

클래스 내에 속하는 변수다.

 

클래스에서 정의한 메소드(함수)안에 파라미터나 변수는 

로컬변수라고 하고 이는 실행될때 스택영역에 잠시 생겼다가 

메소드 전체가 실행되면 다시 사라진다.

 

 

자세한 내용은 아래 

Member 클래스와 AccessMain 의 코드를보자

package data;

public class Member {

	// 멤버변수만!!!! 다른파일에서 사용가능토록 하는
	// 접근제어자가 있다. 접근제어자의 위치는, 데이터타입 왼쪽!
	// 총 4개가 있다.
	// 1. 아무것도 안적는것 => defualt : 같은 패키지 내에서만 접근가능
	// 2. public : 아무대서나 접근가능
	// 3. private
	// 4. protected => 나중에 배운다.
	private String name;
	private String tel;
	private String address;
	
	
	public Member(){
		
	}
	
	public Member(String name, String tel , String address){
		this.name = name;
		this.tel = tel;
		this.address = address;
		
	}
	
	
	// 접근제어자는 클래스의 메소드에도 사용한다.
	// this 라는 키워드!
	// this 는 클래스의 멤버변수나 메소드를 가리킬때 사용한다.
	// 멤버변수와 로컬변수의 이름이 같으면, 컴퓨터도 헷갈리고 , 사람도 헷갈린다.
	// 따라서 this 라는 키워드를 이용해서 구분해주는 용도로 사용한다.
	public void setData(String name, String tel, String address) {
		this.name = name;
		this.tel = tel;
		this.address = address;
	}
	
	public void print() {
		System.out.println(name);
		System.out.println(tel);
		System.out.println(address);
	}
	
	
}

 

// 패키지는 폴더를 의미한다.
package main;

// 다른 폴더, 즉! 다른 패키지의 클래스를 사용하려면, import 해야 한다.
import data.Member;

public class AccessMain {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Member m1 = new Member();
		
		// 아래 코드는, Member 클래스의 멤버변수가
		// public 일때만 동작한다.
		m1.name = "홍길동";;
		m1.tel = "010-1111-2222";
		m1.address = "인천시 서구 가좌동";
		
		// 데이터를 저장하기 위해서는? 멤버 클래스에 함수가 제공되어야함.
		// setData 함수 만든다.
		
		m1.setData("홍길동","010-1111-2222","인천시 서구 가좌동");
		System.out.println();
		
		// 생성자로 바로 데이터를 셋팅할수 있도록 코드를 수정해주세요.
		// 두번째 데이터 만듭니다.
		// 김나나, 010-4433-2211, 서울시 마포구 공덕동
		
		Member m2 = new Member("김나나", "010-4433-2211", "서울시 마포구 공덕동");
		
		m2.print();
		
	}

}