728x90

클래스를 나눠서 만들다보면 필드를 만들고 다른 클래스에서 값을 마음대로 수정할 수 없도록 정보보호?를 위해 private을 붙여주게 된다. 이것을 캡슐화라고 한다.

Car클래스에서 필드에 private를 해주지 않으면 CarPlay클래스에서 값을 마음대로 수정할 수 있다.
하지만 private를 지정해주면 사진처럼 오류가 나오고 값을 수정할 수 없다.

이렇게 설계도 격인 Car클래스의 정보들은 외부에서 수정할 수 없도록 private를 선언해 주어야 한다.

private를 지정한 후 CarPlay클래스에서 값을 지정하는 방법은 
set, get메소드를 통해 가능하다.

 

package day0916;
//설계도인 이 클래스 안에서 필드의 초기값은 없다.
public class Car {
		
	//필드
	//차량번호
	private String number;
	//차량 종류
	private String type;
	//연식
	private int year;
	//가격
	private int price;
	//색깔
	private String color;
	
	
	//메소드
	//차량 출력정보
	public void printInfo() {
		System.out.printf("차량번호 : %s 차량종류: %s\n",number, type);
		System.out.printf("연식 : %d 가격: %d원\n",year, price);
		System.out.printf("색상 : %s\n", color);
	}
	
	//파라미터가 없는 생성자
	public Car() {//파라미터가 없으니까 초기화를 해줘야함
		//지금 String은 null, int는 0으로 초기화 되어있는데 아래처럼 초기화를 안한상태에서 
		//정보를 불러오면 null포인트 오류가 난다. 그래서 오류를 없애기 위해 초기화를 해서 정리?를 해주는것이다.
		number = new String();
		type = new String();
		year =0;
		price =0;
		color = new String();
	}
	
	//파라미터가 있는 생성자
	public Car(String number, String type, int year, int price, String color) {
		//number = number; 
		//이렇게 하면 number는 윗줄에 있는 파라미터 = 파라미터가 되서 입력?이 안된다
		//우리가 원하는건 Car 클래스 안의 필드 number에 파라미터 값을 입력하고 싶은거니까 
		//클래스안의 필드를 가리키는this를 해줘야 한다.
		this.number = number;
		this.type = type;
		this.year = year;
		this.price = price;
		this.color = color;
	}
	
	//필드에 대한 캡슐화
	public void setNumber(String number) {
		this.number = number;
	}
	public String getNumber() {
		return number;
	}
	
	public void setType(String type) {
		this.type = type;
	}
	public String getType() {
		return type;
	}
	
	public void setYear(int year) {
		this.year = year;
	}
	public int getYear() {
		return year;
	}
	
	public void setPrice(int price) {
		this.price = price;
	}
	public int gerPrice()
	{
		return price;
	}
	
	public void setColor(String color) {
		this.color = color;
	}
	public String getColor() {
		return color;
	}
	

이렇게 set과 gaet메소드를 정의 해주면 된다.
set은 메인클래스에서 값을 입력만 받고 출력해주지 않기 때문에 public void를 선언하고 파라미터로 입력해야 하는 타입과 파라미터명을 정해준다(아무렇게나 해도 상관없지만 알아보기 쉬운 단어로 해야한다).

get은 set메소드를 통해 입력받은 값을 메인클래스에 출력할 것이기 때문에 입력받은 타입을 지정해준다. 그리고 return 파라미터값 을 설정해준다.

그리고 값을 출력해줄 printInfo()메소드도 만들어준다.

package day0916;

public class CarPlay {
	public static void main(String[] args) {
		Car c = new Car();
		c.setNumber("01가1234");
		c.setType("모닝");
	    c.setYear(2020);
	    c.setColor("빨간색");
	    
	    c.printInfo();
	    
	}

}
차량번호 : 01가1234 차량종류: 모닝
연식 : 2020 가격: 0원
색상 : 빨간색

메인 메소드에서 위의 코드처럼 new 연산자를 통해 객체 c를 만들고
c.set~()을 통해 각 값을 넣어주면 객체c에 입력한 값들이 저장된다.

그후 printInfo()를 통해 값을 출력해주면 입력한 값들이 나온다.

728x90

'JAVA' 카테고리의 다른 글

상속  (0) 2020.09.24
ArrayList  (0) 2020.09.21
[메소드]toString()메소드  (0) 2020.09.16
배열 연습문제04  (0) 2020.09.12
배열, 2차원 배열 정리  (0) 2020.09.12

+ Recent posts