[Java] 클래스(Class)와 객체(Object)

Jinsung·2021년 4월 11일
0

JAVA

목록 보기
7/12
post-thumbnail

클래스 : Class

클래스(Class)란 객체를 정의해 놓은 것으로 객체의 설계도, 틀이라고 생각하면 된다.

  • 클래스는 객체를 생성하는데 사용되며 객체는 클래스에 정의된 대로 생성된다.

객체 : Object

실제로 존제하는것으로 사물과 같은 유형적인 것뿐만 아니라 개념이나 논리와 같은 무형적인 것 즉 개념들도 객체로 생각하면 된다.

  • 객체가 가지고 있는 기능과 속성에 따라 용도가 달라진다.

객체 지향 프로그래밍

여러 개의 객체 단위를 나눠 작업하는 방식

장점

  • 클래스를 이용하여 연관 있는 함수와 변수를 하나로 묶어 인스턴스를 생성해 사용한다.
  • 프로젝트를 독립적인 객체 단위로 분리해서 작업할 수 있기 때문에 여러 개발자와 협업해 규모가 큰 프로젝트를 진행할 수 있으며 유지보수측면도 뛰어나다.

클래스 생성

클래스는 멤버 변수(속성), 메서드(기능), 생성자 등으로 구성된다.

  • 생성자는 여러개 만들수 있다.

접근제어자

접근 제어자는 클래스나 변수, 메서드의 접근을 제어하기 위해 적어주는 예약어

  • private -> default -> protected -> public 순으로 보다 많은 접근을 허용한다.

    • public -> 다른패키지에서도 접근 가능
    • private -> 자기 클래스에서만 접근 가능
    • default -> 동일 패키지 내에서만 접근 가능
    • protected -> 상속 받은 클래스에서 접근 가능
  • 접근제어자 이후 오는건 반환형이다.
    예시)
    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원

메소드

메소드도 변수와 같이 선언 및 정의 후 필요시에 호출해서 사용한다.

메소드 선언 및 정의

매개변수 : Parameter

메소드(기능)을 불러올때 데이터를 전달할 수 있다.

중복변수 : Overloading

이름은 같고, 매개변수의 개수 또는 타입이 다른 메서드를 만들 수 있다.

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이 저장되면 객체의 연결이 끊기며, 더이상 객체를 이용할 수 없다.

참조 사이트 https://wikidocs.net/218

0개의 댓글