sussa
컴퓨터가 할 일은 컴퓨터가.
sussa
전체 방문자
오늘
어제

블로그 메뉴

    • 분류 전체보기 (58)
      • Language (58)
        • JAVA (58)

    공지사항

    인기 글

    태그

    • recursion
    • spring
    • tree
    • Web
    • Stream
    • 자료구조
    • Database
    • BinarySearchTree
    • java
    • 개발자
    • Algorithm
    • CSS
    • singleton
    • 다형성
    • Instance
    • 조건문
    • HTML
    • 웹개발종합반
    • 상속
    • Til
    • Method
    • 최종연산
    • 재귀
    • DI
    • binaryTree
    • 스파르타코딩클럽
    • Class
    • inheritance
    • Thread
    • 캡슐화

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    sussa

    컴퓨터가 할 일은 컴퓨터가.

    Java Object, Class, Instance(OOP)
    Language/JAVA

    Java Object, Class, Instance(OOP)

    2022. 8. 15. 02:38

    💻 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
      'Language/JAVA' 카테고리의 다른 글
      • Java Overloading(오버로딩) - OOP
      • Java Static과 Instance의 관계(OOP)
      • Java Method(메소드)
      • Java Exception(예외)의 처리
      sussa
      sussa
      Efforts to take on a challenge

      티스토리툴바