본문 바로가기
자바 Java

클래스 / 필드, 메서드, 객체-인스턴스 / getter-setter

by MEHAVING 2019. 9. 23.
반응형

클래스

변수나 메서드를 모아둔 틀, 그릇 같은 것

한 가지만 있어도 되지만 일반적으로 두 가지 모두 있는 것이 보통

코드들을 클래스 단위로 분할하여 구조를 파악하기 쉽게 도와준다.

ex) 학생의 점수를 관리하는 프로그램

'학생'이라는 개념을 클래스화하여 클래스 안의 변수인 필드들(이름, 점수, 최대점수)을 선언해준다.

 

즉, 클래스는 필드와 메서드를 작성하면 만들어 짐, 클래스를 선언한 것.

하지만 변수나 메서드를 모아놓고 틀만 작성한 것이라 실제 물건(객체 or 인스턴스)을 만든 후 이용해야 한다.

 

 

객체 or 인스턴스 만들기 형식

CLASSNAME reference = new CLASSNAME();

class 이름   class 타입의 변수이름 = 해당 클래스로 만들어진 객체

 

 

Hero h1 = new Hero();

Hero 자료형의 변수 h1에 새로운 Hero()객체를 대입하겠다

 

1) new Hero(); 객체를 생성한다

2) Hero h1 = new Hero(); 해당 객체를 Hero형 h1변수에 대입하겠다

 

 

그림으로 예시

 

객체는 레퍼런스 변수

img라는 변수는 새로 만들어진 객체 Image를 가리키고 있음

 

 

인스턴스의 필드에 접근하는 방법 : 마침표(.)로 연결

클래스를 사용하기 위해 img라는 변수가 가르키는 객체에 접근해 클래스 내부의 필드 값인 name에 값을 대입하고 싶을 때

img.name = "SSO";

 

 

클래스를 사용하기 위해 img라는 변수가 가리키는 객체에 punch() 메서드를 이용해 동작 시키고 싶을 때 

img.punch(); 

 

 

메서드

처리를 기술하는 블록

 

<수식자><반환값 타입><메서드 이름>(<인수1의 타입><인수1의 이름>,<인수2의 타입><인수2의 이름>,...,)

메서드는 호출할 때 값(인수)을 건넬 수 있다

 

this

자기 자신의 인스턴스 안에 있는 필드나 메서드를 사용할 경우는 특수한 인스턴스로 자기 자신의 참조 값을 가지고 있는 는 this를 쓰고, 마침표(.)로 연결한다.

밑 예시 학생이름 부분에서 printScore()메서드 에서 name에서도 this.name인데 this가 생략된 것

하지만 만약 필드와 다른 변수의 이름이 동일한 경우 ! this를 생략할 수 없다.

 

 

클래스 내부의 변수 값을 가져오거나 지정하는 get / set메서드

예시

학생의 이름, 점수를 받아 점수 출력하는 프로그램

package 배열;
public class Student {
	//필드 작성
	String name;
	int score;
	static final int MAX_SCORE = 100;
	
	//메서드 선언
	void printScore() {
		System.out.println(name + "씨는" + MAX_SCORE + "점 만점 중, " + score + "점 입니다.");
	}
}

class StudentSample{
	public static void main(String... args) {
		Student shion = new Student(); //클래스를 사용하기 위해 shion 이라는 실제 만든 물건 인스턴스(객체)를 만듬
		// 이제 실제 만든 물건인 shion이라는 인스턴스 객체에도 class에서 작성한 필드, 메서드를 사용할 수 있게 되었다. 
		// 인스턴스 필드에 접근해 값을 설정해주기 위해 마침표(.)를 사용한다.
		shion.name = "시온"; //이름 설정
		shion.score = 80; // 점수 설정
		shion.printScore(); // 새로 생성한 shion 인스턴스의 printScore 메서드 호출
		
		Student haeun = new Student();
		haeun.name = "하은";
		haeun.score = 90;
		haeun.printScore();
	}
}
시온씨는100점 만점 중, 80점 입니다.
하은씨는100점 만점 중, 90점 입니다.

 

 

폭과 높이 사용자로부터 입력받고 면적을 구하는 프로그램을 Rectangle 클래스로 구현

import java.util.Scanner;

public class Rectangle {
	//클래스의 변수인 필드 생성
	int width, height;
	
	//면적을 반환하는 int형 메서드 생성
	int getArea() {
		return height*width;
	}
	
	//객체의 정보를 출력해주는 메서드 생성
	void print() {
		System.out.print("사각형의 폭과 높이 "+width+"와 "+height+"이고,면적은 "+getArea()+"이다.");
	}

	//바로 실행될 메인 함수
	public static void main(String[] args) {
		System.out.print("사각형의 폭과 높이를 나타내는 두 정 입력(스페이스로 구분)>>");
		// 입력 받기 위해 Scanner 객체 생성
		Scanner sc = new Scanner(System.in);
		// 클래스 사용하기 위해 인스턴스(객체) 생성
		Rectangle square = new Rectangle();
		// 생성한 객체의 필드에 입력 받은 높이와 폭을 대입
		square.width = sc.nextInt();
		square.height = sc.nextInt();
		// 생성한 객체의 필드로부터 메서드 실행
		square.getArea();
		square.print();
	}
}
사각형의 폭과 높이를 나타내는 두 정 입력(스페이스로 구분)>>5 20
사각형의 폭과 높이 5와 20이고,면적은 100이다.

 

 

getter / setter

정보 은닉 Hiding information 을 잘 보여주는 메서드

 

클래스의 필드 ( 멤버변수 ) 를 private이나 protected 접근제한자로 설정했을 때

외부에서 getter / setter를 통해 멤버변수의 값을 호출, 지정할 수 있음.

 

단축키

Alt + Shift + s -> Generate Getters and Setters

 

 

객체에 대한 정보를 담고 있는 Phone 클래스

public class Phone {
	//프로그램의 데이터를 외부에서 접근할 수 없도록 private 멤버로 정의
	private String name;
	private String tel;
	
	//메서드만 public으로 공개해 유효한 값들을 데이터로 저장
	public String getName() { //getter
		return name;
	}
	public void setName(String name) { //setter
		this.name = name; 
		//매개변수 name과 필드명이 동일하므로 this 사용해야 메서드의 인자를 받아올 수 있음
	}
	
	public String getTel() { //getter
		return tel;
	}
	public void setTel(String tel) { //setter
		this.tel = tel;
	}
	
	//생성자
	public Phone(String name, String tel) {
		this.name = name;
		this.tel = tel;
	}
}

 

반응형

'자바 Java' 카테고리의 다른 글

출력  (0) 2019.09.23
배열  (0) 2019.09.23
Main 함수의 매개변수 ( argc, argv)  (0) 2019.09.19
JS 웹프로그래밍 / window 객체  (0) 2019.09.18
JS / 구구단 게임  (0) 2019.09.17

댓글