Keep Going

[Java] 클래스와 인스턴스 그리고 객체 본문

Study/JAVA

[Java] 클래스와 인스턴스 그리고 객체

seon 2019. 8. 19.
반응형

class instance object

 

클래스: 설계도(정의)

인스턴스 : 설계도에 따라 만들어진 구체적인 제품(호출)

[클래스와 인스턴스 이전의 프로그래밍]

package org.opentutorials.javatutorials.object;
 
public class CalculatorDemo {
 
    public static void main(String[] args) {
        // 아래의 로직이 1000줄 짜리의 복잡한 로직이라고 가정하자.
        System.out.println(10 + 20);
        System.out.println(20 + 40);
    }
 
}

[메소드화]

package org.opentutorials.javatutorials.object;

public class CalculatorDemo2{
	public static void sum(int left, int right) {
    	System.out.println(left+right);
    }
    
    public static void main(String[] args) {
    	sum(10, 40);
        sum(20, 40);
    }
}

* refactoring : 중복을 제거하여서 변화를 준 것!

[객체화1]

package org.opentutorials.javatutorials.object;

public class CalculatorDemo3 {
	public static void avg(int left, int right) {
    	System.out.printlsn((left+right)/2);
    }
    
    public static void sum(int left, int right){
    	System.out.println(left+right);
    }
    
    public static void main(String[] args) {
    	int left, right;
        left=10;
        right=20;
        
        sum(left, right);
        avg(left, right);
        
        left=0;
        right=40;
        
        sum(left, right);
        avg(left, right);
    }
}

로직이 커지고 양이 많아질수록 예측하지 못했던 요소들이 들어오고, 특히 협업을 하는 상황이라면 내가 의도한 바로 메소드가 정의되지 않을수도 있고 같은이름 다른기능의 메소드들이 생겨날 수 있다. 그래서 서로 연관된 변수들과 메소드들은 그룹핑해서 하나의 부품으로 만들어. 반복적으로 사용도 가능하겠지?

지금까지 배운걸로 생각을 한다면 연관된 부분들을 Cal(*, *)이라는 메소드로 묶어낼 수 있어. 그렇게하면 매번 Cal(*, *)을 호출할 때 마다 sum과 avg가 계산될거야. 

 

나는 sum만 원해!! 라는 사람을 위한말 : "객체를 만들 때가 왔구나"

 

 

 

 

[객체화2]

package org.opentutorials.javatutorials.object;
 
class Calculator{
    int left, right;
      
    public void setOprands(int left, int right){
        this.left = left;
        this.right = right;
    }
      
    public void sum(){
        System.out.println(this.left+this.right);
    }
      
    public void avg(){
        System.out.println((this.left+this.right)/2);
    }
}
  
public class CalculatorDemo4 {
      
    public static void main(String[] args) {
          
        Calculator c1 = new Calculator();
        c1.setOprands(10, 20);
        c1.sum();       
        c1.avg();       
          
        Calculator c2 = new Calculator();
        c2.setOprands(20, 40);
        c2.sum();       
        c2.avg();
    }
  
}

로직의 기획의도를 봐야해(어떻게 사용하는가). 컴퓨터가 쭉 실행하는걸 생각하면서

 

[클래스]

: 연관되어 있는 변수와 메소드의 집합

: 클래스 Calculator는 {left, right 변수 & sum() avg() 함수} 가지고 있다.

 

[인스턴스]

클래스는 설계도야. 그 설계도를 가지고 구체적인 제품으로 만들어야해. 그때 사용하는 키워드가  new야!

Calculator c1 = new Calculator();

new Calculator()를 통해 만든 인스턴스를 c1변수에 담았어.

음! c1이 변수라면 데이터타입은 뭘까?

-> 데이터타입이 Calculator인거네..? 

-> 클래스를 만든다는 것은 사용자 정의 데이터 타입을 만드는 것과 같은 의미야.(아직 어려우니까 차차 설명할게!)

 

** 기억해야 할 것 **

1. 클래스이름 변수이름 = new 클래스이름();

형식으로 인스턴스를 생성한다는 것!!

2. 새로 만든 클래스는 데이터타입이 클래스인 변수에 담아야한다는 것!

 

[객체화3]

하나의 Calculator라는 클래스를 기본으로 

c1, c2 인스턴스가 탄생할 수 있었던 것은!!!!

 

객체 지향이 제공하는 가장 기본적인 재활용성인거지~!~!

반응형

'Study > JAVA' 카테고리의 다른 글

[Java] 생성자  (0) 2019.08.23
[Java] 클래스 멤버와 인스턴스 멤버  (0) 2019.08.23
[Java] 객체 지향 프로그래밍  (0) 2019.08.19
입력과 출력  (0) 2019.08.19
메소드  (0) 2019.08.14