◎ JAVA

private로 객체를 생성하면 메인 클래스에서 객체를 사용 할 수 없다.

  • 우회적으로 private String productName을 사용하려면 setter, getter 메소드를 사용해야 한다.

◆ member field - 잠금 처리(private)

  • 값을 미리 설정하면 값이 없을 때 한 번만 실행되므로 변수는 선언만 한다.

    	private String productName;  
    	private int price;

자바에서 접근제한이 없으면 package 단위로 처리한다.

  • getter, setter, constructor 모두 public을 붙이면 다른 package와 깃허브에서 제 3자도 해당 메서드를 불러와 사용 할 수 있다.

◆ setter 메소드 - 설정용 메소드(계산식)

public void setProductName(String productName) {
	this.productName = productName;
}
public void setPrice(int price) {
	if(price >= 0) {
		this.price = price;
	}
}

getter 메소드 - 반환용 메소드(출력)

  • return : 데이터를 반환하며 종료

  • void : 반환값이 없음 (실행 결과가 없음) != null : 대상 값이 없음

    	public String getProductName() {
    		return this.productName;
    	}
    	public int getPrice() {
    		return this.price;
    	}
  • double, boolean 타입 예시

    	public double getAverage() {
    		return (double)getTotal() / 2;
    	}
    	public boolean isPass() {  // boolean은 getPass 보다 주로 isPass로 사용한다.
    		return getScore() >= 40 && getAverage() >= 40 && getAverage() >= 60;
    	}

◆ getter, setter 자동 생성방법

  1. 메뉴바에서 Source 클릭
  2. Generate getters and setters 클릭
  3. 변수 클릭하고서 package 아이콘 클릭

◆ constructor(생성자)

  • 생성자에서도 설정 시 setter 메소드를 사용하도록 한다.

  • 생성자 자동완성 ( 생성자는 통로를 만들어주는 역할을 한다. / 공통으로 다 사용하는 필드여도 명시적으로 생성자는 만들어줘야 한다.)

    		public Toy(String productName, int price) {
    			this.setProductName(productName);
    			this.setPrice(price);
    		}	
    	
  • 아래 두 가지 방법 다 가능함.

    void output() {
    	System.out.println(this.productName);
    	System.out.println(this.price);

    // 외부 클래스에서 생성자를 불러오고 싶으면 getProductName을 사용함.

    	System.out.println(this.getProductName());
    	System.out.println(this.getPrice());
    }

setter, getter 메소드를 사용할 경우 메인클래스에서 객체를 가져와서 사용 가능하다.

// 메인 클래스 객체 생성

Product p1 = new Product("시리얼", 35000);

// 메인 클래스 데이터 출력

p1.output();

1번, 2번 코드의 차이점

  • 1번 조건이 많을 경우 괄호가 많아지는 단점.

  • 2번 조건이(return; 해야 하는 값) 많을 경우 사용하기에 적합.

  • 2번 괄호안에 괄호가 중복으로 생기는 코드로 작성되지 않아 적합.
    // 1번

    void setKorean(int korean) {
    
    	if(korean >= 0 && korean <= 100) {
    		this.korean = korean;
    	}
    	

    // 2번

    	if(score < 0 || score > 100) {
    		return;       // 실행 종료
    	}
    	this.score = score;
    }

◆ 가상의 getter 메서드

  • 멤버 필드, 생성자에 생성되어 있지 않아도 출력이 가능하다.
  • 외부 클래스에서 가상의 getter 메서드를 사용할 수 있는 장점이 있다.
  • ex) a1.setEnglish(-3000); 음수 값에 점수가 포함 되지 않게 출력된다.

// 가상의 Getter 메소드를 만들어 개발을 편하게 한다.
//-> total 이라는 필드는 없지만 total을 계산해서 반환하는 getTotal()을 만든다.

int getTotal() {
	return this.getKorean() + this.getEnglish() + this.getMath();
}

//-> average라는 필드는 없지만 average를 계산해서 반환하도록 getAverage()를 만든다.

double getAverage() {
	return this.getTotal() / 3.0;
}

◆ TIP!

  1. 메인 클래스에서 ctrl + (void output)생성자 변수 클릭.
  2. 객체지향에서 void output과 같이 변수를 클릭하면 해당 클래스 변수로 이동함.
  3. ait + 왼쪽 화살표 : 메인 클래스의 기존 변수로 되돌아감.
profile
Backend Developer

0개의 댓글