클래스는 타입이다. 집이 아니라 집의 설계도이다. 즉 실체가 아니다!

 

따라서 클래스의 데이터 필드에 데이터를 저장할 수는 없고, 클래스의 

멤버 메서드를 실행할 수 도 없다. 왜냐하면 실체가 아니기 때문

 

new 명령으로 해당 클래스의 객체를 만든 후 , 그 객체에 데이터를 저장하고,

그 객체의 멤버 메서드를 실행하는 것이다. 

 

여기에는 하나의 예외가 존재하는데 그것이 static 멤버이다.

static 멤버는 클래스 안에 실제로 존재하며 객체에는 존재하지 않는다.

 

 그렇다면?

 

왜 메인 메서드는 반드시 static이어야 하는가?

   자바에서는 프로그램이란 클래스의 집합이다. 이 클래스라는건 설계도일뿐!

   그렇기에 static이어야 한다. main이라는 것은 시작점이기에 누군가 new로 만들어줄 수 없기때문이다.

 

왜 static 메서드에서 같은 클래스의 non-static 멤버를 액세스할 수 없는가?

   메인 함수가 포함된 클래스에서는 이때까지 static변수를 사용하였다. static메서드는 클래스 메서드이다.

   그렇기에 static멤버만 액세스가 가능!

 

다른 클래스에 속한 static 멤버는 어떻게 액세스 하는가?

   static멤버는 클래스이름.static멤버 이런식으로 액세스한다.

 

static 메서드/필드의 용도는?

   1. static의 필수적인 경우는 메인 메서드이다.

   2. 상수, 혹은 클래스 당 하나만 유지하고 있으면 되는값

   3. 순수하게 기능만으로 정의되는 메서드, 대표적인 예로는 수학 함수들.

 

앞에서 작성했던 다항식 프로그램들을 main메서드만이 static이 되도록 수정해보았다!

 

package section2;

import java.util.Scanner;

public class code11{

	Polynomial3 polys[] = new Polynomial3 [100];
	int n = 0;
	
	public void procesCommand() {
		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 Polynomial3(name);
				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();

	}
	public static void main(String[] args) {
		
		code11 app = new code11();
		app.procesCommand();

	}

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

}

 

 

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

상속 1  (0) 2021.06.29
static 그리고 public 2  (0) 2021.06.28
메서드와 생성자 3  (0) 2021.06.24
메서드와 생성자 2  (0) 2021.06.24
메서드와 생성자 1  (0) 2021.06.23

+ Recent posts