자바 소스코드는 보통 아래와 같은 형태로 되어 있다.

/* 클래스 블록 */
public class 클래스명 {

    /* 메소드 블록 */
    [public|private|protected] [static] (리턴자료형|void) 메소드명1(입력자료형 매개변수, ...) {
        명령문(statement);
        ...
    }

    /* 메소드 블록 */
    [public|private|protected] [static] (리턴자료형|void) 메소드명2(입력자료형 매개변수, ...) {
        명령문(statement);
        ...
    }

    ...
}

클래스명

클래스명은 원하는 이름으로 지을 수 있지만, 자바 소스 파일 명과 동일하게 지정해야 한다.

참고 자료 ) 점프 투 파이썬

클래스 명 앞에 public 키워드를 추가하면 네이밍을 동일하게 해야 하는 규칙이 있다.

메소드 블록

[public|private|protected]는 메소드의 접근제어자를 뜻한다.

접근 허용 범위는 private < default < protected < public 순으로 보다 많은 접근을 허용한다.

  • private : 접근제어자가 private으로 설정되었다면 private 이 붙은 변수, 메소드는 해당 클래스에서만 접근이 가능하다.
  • default : 접근 제어자를 별도로 설정하지 않는다면 접근 제어자가 없는 변수, 메소드는 default 접근 제어자가 되어 해당 패키지 내에서만 접근이 가능하다
  • protected : 접근제어자가 protected로 설정되었다면 protected가 붙은 변수, 메소드는 동일 패키지의 클래스 또는 해당 클래스를 상속받은 다른 패키지의 클래스에서만 접근이 가능하다.
  • public : 접근제어자가 public으로 설정되었다면 public 접근제어자가 붙은 변수, 메소드는 어떤 클래스에서라도 접근이 가능하다.

static 변수와 메소드

static 변수

Class HouseYoo {
	static String lastname = "Yoo"
}

어떤 객체이던지 항상 동일한 값을 사용하는 경우라면 static 사용 시 메모리 할당을 딱 한번만 하게 되어 메모리 사용에 이점이 있다.

또는 공유한다는 개념도 있는데

static으로 설정하면 동일한 메모리 주소를 바라보기 때문에 static 변수 값을 공유하게 된다.

보통 static 변수는 메모리 효율보다는 공유 목적으로 많이 사용한다고 한다!

static 메소드

메소드 앞에 static이라는 키워드를 붙이면 static 메소드가 된다.

public static void main(String[] args)

static 메소드 안에서 객체 변수 접근은 불가능하다.

static 메소드는 보통 Utility 메소드를 작성할 때 많이 사용한다고 한다. Utility 메소드란, 정적 메소드만 가지고 있고 상태를 내포하지 않는 구조이다. 그래서 인스턴스화할 필요가 없는데 보통 인스턴스화할 필요가 없으면 아예 접근제한자를 private으로 설정해 버린다고 한다.

싱글톤 패턴

싱글톤은 디자인 패턴 중 하나인데 강제로 단 하나의 객체만을 생성하게 하는 패턴이다.

class Singleton{
	private Singleton() {
	}
}

우선 접근제한자를 private으로 설정하여 다른 클래스에서 Singleton 클래스의 생성자로의 접근을 막는다. 이러면 다른 클래스에서 new를 이용하여 객체를 생성할 수 없게 된다.

class Singleton{
	private Singleton() {
	}
	public static Singleton getInstance() {
		return new Singleton();
	}
}

같은 클래스 내에 생성자를 호출이 가능한 점을 이용하여 getInstance라는 static 메소드로 클래스의 객체를 생성한다. 하지만 getInstance를 호출할 때마다 새로운 객체가 생성되므로 객체가 한번만 생성될 수 있게 코드를 수정해줘야 한다.

class Singleton{
	private static Singleton one;
	private Singleton() {
	}
	public static Singleton getInstance() {
		if(one==null) {
			one = new Singleton();
		}
		return one;
	}
}
public class Sample {
	public static void main(String[] args) {
		Singleton singleton = Singleton.getInstance();
	}
}

Singleton 클래스에 one이라는 static 변수를 생성했다. getInstance 메소드에서 if(one==null)절을 추가하여 one 객체가 딱 한번만 만들어지도록 한다.

Leave a comment