본문 바로가기

Programming/Java

객체지향의 의의 - 중복없애기

반응형
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 {
	
		// 중복을 없애는 방법으로 메소드를 만드는 방법이 있다.
		// sum이라는 메소드를 만들고 left, right라는 파라미터 값을 주면
		// System.out.println(left + right);식으로 메소드를 구현해두어 중복되는 코드를 방지할 수 있다.
	  public static void sum(int left, int right) {
	        System.out.println(left + right);
	    }
	 
	    public static void main(String[] args) {
	        sum(10, 20);
	        sum(20, 40);
	    }
	 
}
package org.opentutorials.javatutorials.object;

class CalculatorDemo3 {
	
	// 메소드를 따로 만들어두고
	public static void avg(int left, int right) {
		System.out.println((left + right) / 2);
	}
 
	public static void sum(int left, int right) {
		System.out.println(left + right);
	}
	
	public static void main(String[] args) {
		
		// left, right의 데이터 타입을 int로 지정
		int left, right;
		
		// left, right 변수에 값을 담아서 계산
		left = 10;
		right = 20;
 
		sum(left, right);
		avg(left, right);
 
		left = 20;
		right = 40;
 
		sum(left, right);
		avg(left, right);
	}
 
}

반복을 없애려고 메소드를 썼지만, 결국 또 메소드를 반복하는 결과를 낳았다. 이래서 객체가 필요하다.  

 

package org.opentutorials.javatutorials.object;
 
class Calculator{
    // left, right에 대한 int 데이터 타입 선언
	// 이 데이터는 이 객체 전역에서 접근가능한 데이터임.
	int left, right;
      
	// 리턴값이 없는 int left, int right을 파라미터로 갖는
	// setOprands 메소드 작성
    public void setOprands(int left, int right){
        
    	// this는 이 메소드가 소속된 클라스를 지칭함.
    	// 그러므로, this.left라는 것은
    	// Calculator라는 클래스에서 선언한 이 클래스 혹은 
    	// 객체 전역에 영향을 미치는 left라는 뜻이고
    	// 연산자 오른쪽에 들어간 left는 현재 setOprands에서
    	// 사용하는 매개변수 즉, 파라미터값이 들어가는 것.
    	// 아래 c1.setOprands(10, 20);의 10은
    	// 여기서 파라미터값인 int left에 들어가고
    	// this.left = left; 라고 정의했음에 따라
    	// 10은 다시 전역에 영향을 미치는 int left(this.left)값에 들어가게 됨.
    	this.left = left;
        this.right = right;
    }
      
    // this.left에 담긴 값을 이제 사용할 수 있게 되면서
    // 아래와 같은 메소드를 사용할 수 있게 됨.
    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) {
          
         // c1: 클래스를 상속받아 실제로 만든 제품을 인스턴스라고 한다.
         // Calculator는 c1이라는 변수의 클라스형 데이터타입이라고 이해할 수 있다.
         // Calculator라는 클래스는 곧 설계된 구조를 뜻하고, c1이라는 인스턴스는
         // 그 안에 실제로 사람이 들어와 살게 되는 인테리어로 비유할 수도 있다.
        Calculator c1 = new Calculator();
        c1.setOprands(10, 20);
        c1.sum();       
        c1.avg();       
          
        Calculator c2 = new Calculator();
        c2.setOprands(20, 40);
        c2.sum();       
        c2.avg();
    }
  
}
반응형

'Programming > Java' 카테고리의 다른 글

자바 생성자  (0) 2022.01.29
유효범위 전역변수 지역변수  (0) 2022.01.29
자바 입력과 출력 스캐너 scanner 사용법  (0) 2022.01.29
자바 입출력  (0) 2022.01.29
이클립스 단축키 정리  (0) 2022.01.28