개인/개인공부

Cookie로 알아보는 함수와 변수관련 단어정의

Dev.chandel 2024. 4. 1. 16:45
package Cookie;

public class Cookie {
	/*필드 선언 및 정의
	필드 : 클래스에 선언된 변수를 의미한다.
	선언 : 변수의 이름을 지어주는 것을 말한다.
	정의 : 변수의 메모리를 할당받는 것을 말한다.
	+보통 변수의 이름을 선언하는 동시에 메모리를 할당받기 때문에 선언과 정의는 동시에 이루어진다.
	초기화 : 변수를 선언하고 처음으로 값을 저장하는것을 의미.
	 */
	private String color="흰색";	//색깔 / color 변수 초기화
	private String flavor;		//맛
	private int weight;			//무게
	
	/*생성자 재정의
	 보통 우리가 객체를 생성할때 사용하는 Cookie cookie=new Cookie() <- 이 new 뒤에 붙어있는 Cookie()를 생성자 라고 한다.
	 이 생성자는 우리가 따로 클래스 내에 만들지 않아도 클래스가 생성되면 자동으로 만들어지는데 코드에는 따로 표시 되지는 않는다.
	 다만 본인이 생성할때 기본값을 주고 싶은 경우 생성자를 직접 재정의하는 과정으로 거친다.
	 */
	public Cookie()
	{
		//this : 객체 자기 자신에 대한 참조값을 가진다. 지금으로 따지면 Cookie에 대한 참조값
		this.color="밀색";	//그러므로 Cookie자신의 위에 선언된 color필드의 값을 재할당
		//재할당 : 이미 초기화된 변수(값이 저장되어 있는 변수)의 값을 변경할 경우를 재할당이라도 한다.
		this.flavor="버터맛";
		this.weight=10;	
	}
	
	/*
	 메소드 : 클래스 내부에서 어떠한 명령을 실행하기 위한 명령문(코드)의 집합을 의미
	 */
	//DisplayCookie() : 완성된 쿠키의 정보를 출력하는 메소드
	public void DisplayCookie()
	{
		System.out.println("=======================");
		//당연히 참조된 변수들 앞에 this. 을 붙여도 됩니당(그게 더 정확)
		System.out.println("쿠키의 색깔:"+color);
		System.out.println("쿠키의 맛:"+flavor);
		System.out.println("쿠키의 무게:"+weight+"g");
	}
	
	/*
	 매개변수 : 외부에서 메소드에서 사용될 변수의 값을 대입받는 변수
	 매개변수는 메모리를 할당받지 않고 변수가 어떠한 형태로 들어올지를 정의해주는것이다.
	 */
	//MakeCookie(색깔, 맛, 무게) : 색깔과 맛을 String으로 무게를 int로 매개변수를 정의
	//실제로 _color, _flavor, _weight는 실제로 메모리를 할당받는 변수가 아닌 대입될 변수의 형태를 정의하는 것이다.
	public void MakeCookie(String _color,String _flavor,int _weight)
	{
		this.color=_color;		//매개변수로 들어온 인자의 값으로 재할당
		//인자 : 매개변수를 통해 메소드로 들어온 변수값
		//예를 들어 외부에서 MakeCookie("갈색","마늘맛",20); 이라고 메서드를 호출했을때 "갈색","마늘맛",20이 인자값에 해당
		this.flavor=_flavor;
		this.weight=_weight;
	}
}
package Cookie;

public class CookieExample {
	public static void main(String[] args)
	{
		/*
		 인스턴스 : 클래스(설계도)를 바탕으로 실체화 되어 메모리를 할당받은 실체를 의미
		 객체 : 클래스의 인스턴스나 배열
		 */
		
		//쿠키를 인스턴스화
		Cookie chocoCookie=new Cookie();		//Cookie의 속성을 가진 chocoCookie라는 인스턴스 객체
		Cookie[] rainbowCookie=new Cookie[3];	//Cookie의 속성을 가진 rainbowCookie라는 인스턴스 객체배열 생성
		//이때 배열을 생성한 것이지 쿠키를 생성한 것이 아니다. 쿠키라는 속성을 가진 변수 3개를 받을 자리인 배열을 생성한 것.
		
		
		chocoCookie.MakeCookie("갈색","초코맛",15);	//Cookie클래스의 MakeCookie메서드를 호출하여 인자값 전달
		
		//3개를 만들어놓은 rainbowCookie배열의 모든 쿠키를 생성헤줌(그 전까지는 생성을 안해줬기 때문에 null값)
		//값을 할당하는 경우에는 향상된 for문이 사용불가능
		for(int i=0;i<rainbowCookie.length;i++)
		{
			rainbowCookie[i]=new Cookie();
		}
		
		rainbowCookie[0].MakeCookie("분홍색", "딸기맛", 10);
		rainbowCookie[1].MakeCookie("파란색", "블루베리맛", 12);
		rainbowCookie[2].MakeCookie("초록색", "말차맛", 15);
		
		chocoCookie.DisplayCookie();
		
		//배열을 돌면서 값만 출력하는 경우에는 향상된 for문 사용 가능
		for(Cookie cookie:rainbowCookie)
		{
			cookie.DisplayCookie();
		}
	}
}

결과창


this를 사용하는 이유

위 예시와 같이 같은 이름의 변수를 여기저기에서 선언한 경우.

해당 클래스의 선언된 필드를 사용하기 위해(정확히 하기 위해) 사용.

 

클래스 내부 필드를 private로 선언하는 이유

외부에서 선언된 같은 이름의 변수가 호출되는 것을 방지.

외부에서 필드를 호출하여 필드를 회손하는 것을 방지.

+부모 클래스는 자식 클래스에게 변수를 공유해주기 때문에 일반적으로 부모 클래스의 변수는 protected를 사용하여 선언.

 

get(),set()을 사용하는 이유

클래스에서 private로 선언된 필드들은 외부에서 호출이 불가능 하기 때문에

이러한 과정을 캡슐화 라고 한다.