클래스 라는 것은 관련있는 데이터들을 하나의 단위로 묶어두기 위한 것이다.

하지만 이것이 전부가 아니다.

서로 관련있는 데이터들 뿐 아니라, 그 데이타와 관련이 깊은 메서드 까지도 함께 묶어둘 수 있다.

이렇게 함으로써 코드의 응집도를 높이고 결합도를 낮출 수 있다.

 

객체란 ?

 

객체지향 프로그래밍에서 객체란 " 데이터 " + " 메서드 " 이다. 데이터는 객체의 정적 속성을

표현하고 메서드는 객체의 기능을 표현한다.

 

그렇다면 전의 예제의 함수들을 옮겨보겠다!

package section2;

public class Polynomial2 {
	
	public char name; //다항식의 이름
	public int nTerms = 0; // 항의 개수
	public Term2[] terms; //항들의 배열
	
	public int calcPolynomial(int x) {
		int result = 0;
		
		for (int i =0; i< nTerms; i++) {
			result += (terms[i].calTerm(x));
			}
		return result;
	}

	public void printPolynomial() {
		for(int i =0; i<nTerms; i++) {
			terms[i].printTerm();
			System.out.print("+");
		}
		System.out.println();
		
	}
	
	public void addTerm(int c, int e) {
		int index = findTerm(e);
		if(index != -1) {
				terms[index].coef += c;
		}
		else {
			int i = nTerms-1;
			while(i >= 0 && terms[i].exp < e) {
				terms[i+1] = terms[i];
				i--;
			}
			terms[i+1] = new Term2();
			terms[i+1].coef = c;
			terms[i+1].exp =e;
			nTerms++;
		}
	}

	public int findTerm(int e) {
		for(int i=0;i<nTerms && terms[i].exp >=e ;i++) {
			if(terms[i].exp ==e) {
				return i;
			}
		}
		return -1;
	}
}

    다항 클래스

package section2;

public class Term2 {
	
	public int coef;//계수
	public int exp;//차수
	
	public int calTerm(int x) {
		return (int)(coef * Math.pow(x, exp));
	}
	
	public void printTerm() {
		System.out.print(coef + "x^" +exp);
	}
}

항 클래스

package section2;

import java.util.Scanner;

public class code7{

	static Polynomial2 polys[] = new Polynomial2 [100];
	static int n = 0;
	
	public static void main(String[] args) {
		
		Scanner kb = new Scanner(System.in);
		while(true) {
			System.out.print("$ ");
			String command = kb.next();
			if(command.equals("create")) {
				char name = kb.next().charAt(0);
				polys[n] = new Polynomial2();
				polys[n].terms = new Term2[100];
				polys[n].name = name;
				polys[n].nTerms = 0;
				n++;
			}
			else if(command.equals("add")) {
				char name = kb.next().charAt(0);
				int index = find(name);
				if(index==-1) {
					System.out.println("No such Polynomial exist");
				}
				else {
					int c = kb.nextInt();
					int e = kb.nextInt();
					polys[index].addTerm(c,e);
					
				}
				
			}
			else if(command.equals("calc")) {
				char name = kb.next().charAt(0);
				int index = find(name);
				if(index==-1) {
					System.out.println("No such Polynomial exist");
				}
				else {
					int x = kb.nextInt();
					int result = polys[index].calcPolynomial(x);
					System.out.println(result);
				}
				
			}
			else if(command.equals("print")) {
				char name = kb.next().charAt(0);
				int index = find(name);
				if(index==-1) {
					System.out.println("No such Polynomial exist");
				}
				else {
					polys[index].printPolynomial();
				}

			}
			else if(command.equals("exit")) {
				break;
			}
		}
		
		kb.close();

	}

	private static int find(char name) {
		for(int i =0;i<n;i++) {
			if(polys[i].name == name) {
				return i;
			}
		}
		return -1;
	}

}

메인 클래스

'알고리즘 with 자바 > 자료구조' 카테고리의 다른 글

메서드와 생성자 3  (0) 2021.06.24
메서드와 생성자 2  (0) 2021.06.24
클래스 ,객체, 참조변수 5  (0) 2021.06.23
클래스, 객체, 참조변수 4  (0) 2021.06.22
클래스, 객체, 참조변수 3  (0) 2021.06.22

+ Recent posts