객체 지향 프로그래밍에서는 모든 데이터를 객체(object)로 취급하며, 이러한 객체가 바로 프로그래밍의 중심이 됩니다.
객체(object)란 간단히 이야기하자면 실생활에서 우리가 인식할 수 있는 사물로 설명할 수 있습니다.
이러한 객체의 상태(state)와 행동(behavior)을 구체화하는 형태의 프로그래밍이 바로 객체 지향 프로그래밍입니다.
이때 객체를 만들어 내기 위한 설계도와 같은 개념을 클래스(class)라고 합니다.
자바에서 클래스(class)란 객체를 정의하는 틀 또는 설계도와 같은 의미로 사용됩니다.
자바에서는 이러한 설계도인 클래스를 가지고, 여러 객체를 생성하여 사용하게 됩니다.
클래스는 객체의 상태를 나타내는 필드(field)와 객체의 행동을 나타내는 메소드(method)로 구성됩니다.
즉, 필드(field)란 클래스에 포함된 변수(variable)를 의미합니다.
또한, 메소드(method)란 어떠한 특정 작업을 수행하기 위한 명령문의 집합이라 할 수 있습니다.
자바에서 클래스를 사용하기 위해서는 우선 해당 클래스 타입의 객체(object)를 선언해야 합니다.
이렇게 클래스로부터 객체를 선언하는 과정을 클래스의 인스턴스 화라고 합니다.
또한, 이렇게 선언된 해당 클래스 타입의 객체를 인스턴스(instance)라고 합니다.
즉, 인스턴스란 메모리에 할당된 객체를 의미합니다.
자바에서는 하나의 클래스로부터 여러 개의 인스턴스를 생성할 수 있습니다.
이렇게 생성된 인스턴스는 독립된 메모리 공간에 저장된 자신만의 필드를 가질 수 있습니다.
하지만 해당 클래스의 모든 메소드(method)는 해당 클래스에서 생성된 모든 인스턴스가 공유하게 됩니다.
package class_;
class Person{
//private : 해당 class 안에서만 접근
private String name; //필드, 초기값 : null
private int age; //필드, 초기값 : 0
//method 구현
//return(결과값, 반환값)은 반드시 1개뿐이다.
//return이 없으면 void로 선언한다.
//setters,getters
//setters메소드에는 void 사용 -> 반환값(return)이 없다
public void setName(String n){ //String n : 매개변수(parameter) : 메소드에 전달되는 값을 전달하는 변수
this.name=n; //this.name = class 필드 변수
}
public void setAge(int a) {
age=a;
}
public void setData(String n, int a) {
name = n;
age = a;
}
public void setData() {
}
public String getName(){
return name; //반환값
}
public int getAge(){
return age; //반환값
}
}
public class PersonMain {
public static void main(String[] args) {
Person a; //객체 선언(class형 변수=참조변수)
a = new Person(); //생성, 메모리의 heap영역에 생성(이름부여X, 주소O)
/*
클래스 타입의 객체(a)를 선언(클래스로부터 객체를 선언하는 과정을 클래스의 인스턴스 화)
인스턴스(instance) : 선언된 해당 클래스 타입의 객체를 인스턴스(a)라고 한다.
즉, 인스턴스란 메모리에 할당된 객체를 의미.
*/
System.out.println("객체 a = "+a); //주소
a.setName("용준"); //호출 - 호출한 함수는 반드시 제자리로 돌아온다.
a.setAge(30); //호출 /30 : 인수(argument)
System.out.println("이름 = "+a.getName()+" 나이 = "+a.getAge());
Person b = new Person();
System.out.println("객체 b = "+b);
b.setName("용우");
b.setAge(27);
System.out.println("이름 = "+b.getName()+" 나이 = "+b.getAge());
Person c = new Person();
System.out.println("객체 c = "+c);
c.setData("", 100);
System.out.println("이름 = "+c.getName()+" 나이 = "+c.getAge());
Person d = new Person();
d.setData();
System.out.println("이름 = "+d.getName()+" 나이 = "+d.getAge());
}
}