범용적으로 사용될 수 있는, 혹은 공통점을 가진 메서드들의 틀을 만들어 여러 곳에서 사용할 수 있도록 한다.
불필요한 코드의 중복을 방지하고 클래스나 메서드가 가진 실질적인 기능을 이해하는데 도움을 준다고 이해했다.
클래스는 위에서 말한 추상화가 실현되는 공간이다. 변수를 담아두고, 메서드를 구현하여 두었다가, main메서드를 통해 인스턴스화된 클래스는 변수들에 값을 할당하고 메서드를 실행시켜 원하는 기능을 각각의 상황에 맞게 구현하게 된다.
일반적으로 new를 사용하여 호출하는 메서드들은 stack메모리에 주소가, heap메모리에 값이 저장되어 실행되는 방식이다. 이 방식은 호출되어 실행된 이후 Garbage Collector에서 사용되지 않는 메서드를 전부 정리해 버리게 된다.
static을 사용한 메서드나 변수는 그와 다르게 static메모리에 저장되어 main함수가 종료될때까지 사라지지 않는다. 그렇기 때문에 따로 new를 사용하여 호출하지 않아도 사용할 수 있지만, 프로그램이 종료될때까지 메모리에 남아있기 때문에 프로그램이 종료되기 전까지 값이 초기화되지 않아야 하는 경우가 아니면 사용을 자제해야 한다.
public void printInfo(String ...infos){
for(int i=0; i<infos.length; i++){
System.out.printf("%s ,",infos[i]);
}
}
위와 같이 변수명 앞에 '...'을 사용하면 된다. 메서드를 호출해 입력해야 할때는 변수의 타입에 맞춰 괄호 안에 ("aaa","bbb")와 같이 원하는 만큼 입력하면 자동적으로 배열로 변환되어 메서드 내부에서 사용할 수 있게 된다.
자바는 같은 이름의 메서드를 매개변수(파라미터)의 타입이나 개수를 다르게 해서 여러개 생성해 사용할 수 있다. 이 방식은 변수의 타입이 자주 바뀌는 메서드를 사용할 때 번거롭지 않도록 도와준다.
생성자는 리턴타입이 없는 특별한 메서드이다. 멤버 변수 초기화에 사용되며, 메서드이므로 오버로딩을 할 수 있어 필요한 생성자를 만들어 객체에 적용할 수 있다.
String color;
String company;
String type;
Car2() {
this("흰색", "기아", "경차");
}
Car2(String color, String company, String type) {
this.color = color;
this.company = company;
this.type = type;
}
기본 생성자에 사용해 new로 객체 생성 시 변수의 기본값을 정해줄 수도 있고(이 방식대로 할 때는 규격에 맞는 생성자가 존재해야 한다), 외부 값과 클래스 내부의 변수의 이름이 같을 때 둘을 연결시켜주는 역할을 한다. 실무에서는 변수값을 표기할때 동일하게 설정하고 this.을 사용하므로 공식처럼 알아둘 것.
int x;
static int A ;
static {
A++;
System.out.println("static block A : " + A);
}
{
x++;
System.out.println("instance block x : " + x);
}
static을 사용할 시 클래스가 객체로 생성되는 횟수와 무관하게 main메서드 실행시 단 한번 실행되고, 일반적인 인스턴스 블록으로 사용될 때는 new를 통해 객체가 생성될 때 따로 호출하지 않아도 자동적으로 실행된다.
아무런 예외처리나 변수에 대한 검증이 없다면 그 변수가 잘못되거나 누락되었을 때, 혹은 오류를 발생시켜 프로그램이 종료될 위협에서 보호할 수 없다.
Getter와 Setter메서드를 사용하면 그런 위협에서 프로그램을 보호할 수 있다. 변수가 입력되고 출력되는 사이에 문제가 생길 수 있는 값들을 강제로 바꿔주거나 프로그램이 종료되기 전에 메서드를 중지하고 오류메세지를 보낼 수 있도록 코딩할 수 있는 공간이다.
Stack은 순차적으로 저장하되, 가장 나중에 저장된 자료부터 순차적으로 빼는 구조이다. 상자를 쌓을 때 그 상자와 가로세로 규격이 맞아 떨어지는 통에 넣어서, 뺄 때 위에서부터 다시 뽑아 올려야 한다고 생각하면 된다.
Queue는 순차적으로 저장하되, 가장 먼저 저장된 자료부터 순차적으로 빼는 구조이다. 일반적으로 우리가 무언가를 사거나 받기 위해 줄을 서는 구조와 비슷하다고 보면 된다.