클래스는 타입이다. 집이 아니라 집의 설계도이다. 즉 실체가 아니다!
따라서 클래스의 데이터 필드에 데이터를 저장할 수는 없고, 클래스의
멤버 메서드를 실행할 수 도 없다. 왜냐하면 실체가 아니기 때문
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 |