💻 Java Object(객체), Class, Instance
🎯 목표 : 클래스 타입의 객체를 만들어 인스턴스화 하는 과정의 기초를 이해
생활코딩 강의의 예제를 들어 작성
📒 객체, 클래스, 인스턴스의 기초
❗ Object(객체)
사전적 정의로 물리적으로 존재하거나 추상적으로 생각 할 수 있는 것중 자신과 다른 것을 식별 가능한 것을 말한다. OOP 에서의 객체 구성은 속성과 동작으로 구성되어있으며, 예를들면 사람이라는 객체에 이름,나이의 속성 그리고 먹고,걷고,달리는 동작이 있다. 속성은 Field 동작은 Method라고 한다.
❗ Class
객체를 정의하는 틀, 설계도의 의미.
클래스를 가지고 여러 객체를 생성하고 사용한다.
❗ Instance
클래스를 사용하기 위해서는 해당 클래스 타입의 객체를 선언해야하며 클래스로부터 객체를 선언하는 과정.
선언된 해당 클래스 타입의 객체를 인스턴스라고 한다.
👉 클래스와 인스턴스 예제
import java.io.FileWriter;
import java.io.IOException;
public class OthersOOP {
public static void main(String[] args) throws IOException {
// Class : System, Meth, FileWriter
// Instance : f1, f2
System.out.println(Math.PI);
System.out.println(Math.floor(1.8));
System.out.println(Math.ceil(1.8));
FileWriter f1 = new FileWriter("data.txt");
f1.write("Hello");
f1.write(" Java");
f1.close();
FileWriter f2 = new FileWriter("data2.txt");
f2.write("Hello");
f2.write(" Java2");
f2.close();
f1.write("!!!"); // 다시 한번더 호출해서 작업할수 있음
f1.close(); // 1회성 작업이 아닌 긴 맥락의 작업일때 Instance를 만들어 활용
}
}
- 위 예제에서 Class는 System, Math, FileWriter고 Instance는 f1,f2 이다.
- Instance f1,f2는 FileWriter Class의 타입의 객체다.
👉 인스턴스화 과정 예제
public class MyOOP {
public static void main(String[] args) {
delimiter = "====";
printA();
printB();
delimiter = "////";
printA();
printB();
}
public static String delimiter = "";
public static void printA() {
System.out.println(delimiter);
System.out.println("A");
System.out.println("A");
}
public static void printB() {
System.out.println(delimiter);
System.out.println("B");
System.out.println("B");
}
}
- 클래스 내에서 printA,printB 메소드를 만들어 코드를 작성 하였지만, Print라는 클래스를 생성하여 Print 소속의 A(),B() 메소드를 적용하여 코드를 개선 할수 있다.
class Print {
public static String delimiter = "";
public static void A() {
System.out.println(delimiter);
System.out.println("A");
System.out.println("A");
}
public static void B() {
System.out.println(delimiter);
System.out.println("B");
System.out.println("B");
}
}
public class MyOOP {
public static void main(String[] args) {
Print.delimiter = "====";
Print.A();
Print.B();
Print.delimiter = "////";
Print.A();
Print.B();
}
}
- Print 라는 클래스를 생성하여 코드를 개선 하였지만 해당 클래스를 인스턴스화 하여 클래스 활용의 폭을 다양하게 개선할수 있다.
- 선언된 클래스에 Static 타입의 메소드는 선언된 클래스 고유의 메소드 이므로 인스턴스에서 호출 할수 없어 Static을 삭제 해준다.
class Print {
public String delimiter = "";
public void A() {
System.out.println(delimiter);
System.out.println("A");
System.out.println("A");
}
public void B() {
System.out.println(delimiter);
System.out.println("B");
System.out.println("B");
}
}
public class MyOOP {
public static void main(String[] args) {
// Instance화
Print p1 = new Print();
p1.delimiter = "====";
p1.A();
p1.B();
Print p2 = new Print();
p2.delimiter = "////";
p2.A();
p2.B();
}
}
- 인스턴스를 생성 할때 따로 인스턴스 p1,p2를 호출하여 delimiter라는 매게변수 값을 설정해 주는것 보다 인스턴스 초기화 메소드 Constructor(생성자)를 사용해 코드를 조금 더 개선 할수 있다.
class Print {
public String delimiter = "";
public Print(String delimiter) {
this.delimiter = delimiter;
}
public void A() {
System.out.println(this.delimiter);
System.out.println("A");
System.out.println("A");
}
public void B() {
System.out.println(this.delimiter);
System.out.println("B");
System.out.println("B");
}
}
public class MyOOP {
public static void main(String[] args) {
Print p1 = new Print("====");
p1.A();
p1.B();
Print p2 = new Print("////");
p2.A();
p2.B();
}
}
- 생성자를 입력할때 매게변수 delimiter의 소속 관계를 확실하게 하기 위해 this.을 활용한다.
- this.delimiter는 Print 클래스 인스턴스의 delimiter를 가르킨다.
'Language > JAVA' 카테고리의 다른 글
Java Overloading(오버로딩) - OOP (0) | 2022.08.19 |
---|---|
Java Static과 Instance의 관계(OOP) (0) | 2022.08.17 |
Java Method(메소드) (0) | 2022.08.13 |
Java Exception(예외)의 처리 (0) | 2022.08.13 |
Java 조건문 반복문 배열 응용 (0) | 2022.08.11 |