클래스(Class)란 객체를 정의해 놓은 것으로 객체의 설계도, 틀이라고 생각하면 된다.
실제로 존제하는것으로 사물과 같은 유형적인 것뿐만 아니라 개념이나 논리와 같은 무형적인 것 즉 개념들도 객체로 생각하면 된다.
여러 개의 객체 단위를 나눠 작업하는 방식
클래스는 멤버 변수(속성), 메서드(기능), 생성자 등으로 구성된다.
접근 제어자는 클래스나 변수, 메서드의 접근을 제어하기 위해 적어주는 예약어
private -> default -> protected -> public 순으로 보다 많은 접근을 허용한다.
접근제어자 이후 오는건 반환형이다.
예시)
void = 반환이 없다.
String = String으로 반환(return "String")
package project;
public class Grandeur { // ------> class 이름
public String color; // ------> 멤버 변수(속성)
public int price;
public Grandeur() { // ------> 생성자
System.out.println("constructor");
}
public void run() { // -------> 메서드(기능)
System.out.println("run");
}
public void stop() { // -------> 메서드(기능)
System.out.println("stop");
}
public void info() { // -------> 메서드(기능)
System.out.println("color ="+color);
System.out.println("price ="+ price +"원");
}
}
package project;
public class Grandeur { // ------> class 이름
public String color; // ------> 멤버 변수(속성)
public int price;
public Grandeur() { // ------> 생성자
System.out.println("constructor");
}
public Grandeur(String a, int b) { // ------> 생성자2
System.out.println("constructor2");
this.color = a;
this.price = b;
}
public void info() { // -------> 메서드(기능)
System.out.println("color ="+color);
System.out.println("price ="+ price +"원");
}
}
클래스로 부터 new를 이용해서 객체를 생성한다.
package project;
public class MainClass { //메인 클래스 생성
public static void main(String[] args) {
Grandeur cair = new Grandeur(); // Grandeur 클래스의 cair 래퍼런스를 생성
cair.color = "red"; // 클래스 Grandeur의 변수 color의 값 대입
cair.price = 10000; // 클래스 Grandeur의 변수 price의 값 대입
cair.run(); // 클래스 Grandeur의 run의 메소드(기능) 실행
cair.stop();
cair.info();
System.out.println("\n");
Grandeur cair1 = new Grandeur();
cair1.color = "blue";
cair1.price = 20000;
cair1.run();
cair1.stop();
cair1.info();
}
}
결과값
constructor
run
stop
color =red
price =10000원
constructor
run
stop
color =blue
price =20000원
package project;
public class MainClass {
public static void main(String[] args) {
Grandeur cair = new Grandeur("rad", 10000); // a랑 b의 값
cair.info();
System.out.println("\n");
cair.color = "blue";
cair.info();
}
}
결과값
constructor2
color =rad
price =10000원
color =blue
price =10000원
메소드도 변수와 같이 선언 및 정의 후 필요시에 호출해서 사용한다.
메소드(기능)을 불러올때 데이터를 전달할 수 있다.
이름은 같고, 매개변수의 개수 또는 타입이 다른 메서드를 만들 수 있다.
Class
package project;
public class DoClass {
public String name;
public String gender;
public int age;
public DoClass() {
System.out.println("DoClass");
}
public void getInfo() {
System.out.println("getInfo() 실행");
System.out.println("name =" + name);
System.out.println("gender =" + gender);
System.out.println("age =" + age);
System.out.println("\n");
}
public void setInfo(String a, String b,int c) {
System.out.println("setInfo() 실행");
name = a;
gender = b;
age = c;
}
public void setInfo(int x, int y) {
System.out.println("중복 메서드 실행");
System.out.println("x ="+ x);
System.out.println("y ="+ y);
}
}
객체
package project;
public class MainClass {
public static void main(String[] args) {
DoClass doing = new DoClass();
doing.name = "새하마";
doing.gender = "여자";
doing.age = 20;
doing.getInfo();
doing.setInfo("새하마", "남자", 21);
doing.getInfo();
doing.setInfo(10, 11);
}
}
생성한 객체의 주소를 변수에 저장하는 것을 래퍼런스라고 한다.
DoClass doing = new DoClass();
doing에 DoClass가 들어간게 아니라 doing은 DoClass의 위치(주소)를 "가르킨다"라고 생각하면 된다.
DoClass doing = new DoClass();
doing = null;
위 처럼 래퍼런스에 null이 저장되면 객체의 연결이 끊기며, 더이상 객체를 이용할 수 없다.