국비/Java

[07-2] Java - 객체(Object)

박머루 2022. 4. 15. 20:33
❗ 객체지향 프로그래밍
* 현실세계에서 독립적인 존재들 (객체)간의 상호작용(행위)를 프로그래밍 언어를 통해 코드로 구현하는 것.

* 구현하고자 하는 프로그램 상에 객체(변수)를 만들기 위해서는(생성하기 위해서는)
=> 클래스라는 틀을 먼저 만들어야 한다.
* 클래스란? 각 객체들의 속성(정보, 행위)들을 담다내는 그릇 또는 틀 같은 존재!
* VO(Value Object)

* 객체 생성
// ㅇㅇ씨네 도마뱀 이름은 ? 용감이 => String name;
// 배가 하얗다. => String abdColor;
// 발은 노랗다. => String ftColor;
// 몸도 노랗다. => String bdColor;
// 눈은 빨갛다. => String ouColor;

new Lizard(); // 객체를 생성한 것! => new 키워드사용!!!!! 메모리의 heap 영역에 공간이 할당됨

Lizard L1 = new Lizard();
// stack 영역의 L1변수(박스)가 heap영역의 Lizard 공간 번지를 가리킴 번지2

Lizard L2 = new Lizard();
// heap 영역에 L2 변수가 heap 영역에 만들어진 또 다른 공간을 가리킴 번지2
❗vo 클래스의 구조 (필드부, 생성자부, 메소드부)
public class 클래스이름{ //클래스 시작

1. 필드부 = 속성 (변수)

2. 생성자부

3. 메소드부 = 행위(메소드)

} //클래스 끝


[필드부] 정보를 담는 부분!
접근제한자 자료형 필드이름;
ex) public String name; // 필드 선언
public double wt;

접근제한자 : 이 필드에 접근할 수 있는 범위를 제한할 수 있음
public > protected > default > private
클래스 안에서 필드를 선언할 때 반드시!!! 접근 제한자를 써줄 것임!!!!

(필드 == 멤버변수 == 클래스변수)

[생성자부]
아직 안배움

[메소드부] 기능을 구현하는 부분!

접근제한자 반환형 메소드식별자(매개변수) {
메소드를 호출하면 실행할 코드;
}

public void eat(int wt) { //먹을 때마다 체중을 늘리는 메소드
this.wt += wt;
}

* public 접근제한자 : 메소드를 호출할 수 있는 범위를 제한해준다.

* void 반환형 : 메소드의 결과값의 자료형을 지정해준다
void -> 돌려줄 값이 없다. 돌려줄 값이 있다면 돌려줄 값의 형태를 적어줌!! (자료형)

* ( ) 매개변수 : 메소드 호출 시 입력값으로 넣어주는 변수. 해당 메소드 실행중에만 사용 가능한 변수. 생략 가능
* method() 메소드식별자()
public class Run {
	public static void main(String[] args) {

		// ㅇㅇ씨네 도마뱀 이름은 ? 용감이 => String name;
		// 배가 하얗다. => String abdColor;
		// 발은 노랗다. => String ftColor;
		// 몸도 노랗다. => String bdColor;
		// 눈은 빨갛다. => String ouColor;
		
//1.	new Lizard(); // 객체를 생성한 것!
		Lizard L1 = new Lizard();
		Lizard L2 = new Lizard();

		L1.name = "용감이";
		L1.abdColor = "하얗다";
		L1.ftColor = "노랗다";
		L1.bdColor = "노랗다";
		L1.ouColor = "빨갛다";
		L1.wt = 0.15;
		// L1에 접근해서 정보를 넣음. heap영역의 Lizard 공간에 정보를 넣은 것!
		
		System.out.println(L1.name);
		System.out.println(L1.abdColor);
		System.out.println(L1.ftColor);
		System.out.println(L1.bdColor);
		System.out.println(L1.ouColor);
		System.out.println(L1.wt);
		
		System.out.println("------------------");
		
		L2.name = "도롱이";
		L2.abdColor = "분홍색";
		L2.ftColor = "보라색";
		L2.bdColor = "보라색";
		L2.ouColor = "검은색";
		L2.wt = 5;
		
		System.out.println(L2.name);
		System.out.println(L2.abdColor);
		System.out.println(L2.ftColor);
		System.out.println(L2.bdColor);
		System.out.println(L2.ouColor);
		System.out.println(L2.wt);
		
		L2.eat(2);
		L2.eat(2);
		System.out.println(L2.wt);
		
		L2.jump();
		L2.jump();
		L2.jump();
		L2.jump();
		L2.jump();
		L2.jump();
		L2.jump();
		
		System.out.println(L2.wt);
		
		// 직접적으로 접근해서 값 대입
		// 직접적으로 접근해서 값 조회
		// 직접 접근해서 값을 대입하고 조회할 경우 => 보안의 문제가 생길 수 있음
		// 객체 지향 설계 원칙 중 하나가 정보은닉! >> 객체 내부의 정보를 조회, 접근, 수정 할 수 없도록
		// 정보은닉을 하기 위한 기술 중 하나 >> 캡슐화(encapsulation)
		
	}
 }​
public class Lizard {
	
	// [필드부] 필드선언
	public String name;
	public String abdColor;
	public String ftColor;
	public String bdColor;
	public String ouColor;
	public double wt;
	
	// [생성자부]
	// 아직 안배웠으니 넘어감
	
	// [메소드부]
	public void eat(int wt) {
		this.wt += wt;	
	}
	public void jump() {
		if(0.15 <= wt && wt <= 1) {
			System.out.println("살 안빼~~ 너나해");
		} else {
			wt -= 0.5;

		}
	}​