
생성자를 이용한 final 멤버 변수의 초기화
final이 붙은 변수 = 상수 -> 일반적으로 선언과 동시에 초기화
but 인스턴스 변수는 생성자에서 초기화할 수 있음
클래스 내에 매개변수를 갖는 생성자를 선언 -> 인스턴스 생성 시 final이 붙은 멤버변수를 초기화하는데 필요한 값을 생성자의 매개변수로부터 제공받는 것
각 인스턴스마다 final이 붙은 멤버변수가 다른 값을 갖도록 하는 것이 가능
class Card {
static final int PATTERN_NUMBERS = 4;
static final int CARDS_PER_PATTERN = 13;
final int pattern; // final 멤버 변수 선언
final int number;
Card(int pattern, int number) {
this.pattern = pattern; // final 멤버 변수 초기화
this.number = number;
}
}
메서드의 선언부만 작성하고 실제 수행내용은 구현하지 않은 추상 메서드를 선언하는데 사용
abstract 사용 가능한 곳 : 클래스, 메서드

추상 클래스 : 아직 완성되지 않은 메서드가 존재하는 '미완성 설계도'
-> 인스턴스 생성 불가
abstract class AbstractTest { // 추상 클래스 (추상 메서드를 포함한 클래스)
abstract void move(); // 추상 메서드 (구현부 없는 메서드)
}
접근 제어자 사용 가능한 곳 : 클래스, 멤버변수, 메서드, 생성자
private : 같은 클래스 내에서만 접근
default : 같은 패키지 내에서만 접근
protected : 같은 패키지 내, 다른 패키지의 자손 클래스에서 접근
public : 접근 제한 없음

대상에 따라 사용할 수 있는 접근 제어자

접근 제어자를 사용하는 이유 : 캡슐화
하나의 소스파일(*.java)에는 public 클래스가 단 하나만 존재 가능 + 소스파일의 이름은 반드시 public 클래스의 이름과 동일해야 함
생성자의 접근 제어자
생성자에 접근 제어자 사용 => 인스턴스의 생성 제한할 수 있음.
보통 생성자 접근 제어자는 클래스 접근 제어자와 동일 but 다르게 지정 가능함
public class SingletonTest {
final class Singleton{
private static Singleton s = new Singleton(); // (1)
private Singleton() {
// ...
}
public static Singleton getInstance() { // (2)
if (s == null)
s = new Singleton();
return s;
}
}
class SingletonTest {
public static void main(String args[]) {
// Singleton s = new Singleton(); // (3)
Singleton s = Singleton.getInstance();
}
}
}
생성자를 통해 직접 인스턴스를 생성하지 못하게 하고 / public 메서드를 통해 인스턴스에 접근하게 함 -> 사용할 수 있는 인스턴스의 개수를 제한할 수 있음
생성자가 private인 클래스는 다른 클래스의 조상이 될 수 없음 : 자손 클래스의 인스턴스를 생성할 때 조상 클래스의 생성자를 호출해야함 but 생성자의 접근 제어자가 private이면 자손 클래스에서 호출할 수 없기 때문
-> 클래스 앞에 final을 추가하여 상속할 수 없는 클래스라는 것을 알리는 것이 좋다

접근 제어자가 private이면 오버라이딩 될 수 없으므로 둘 중 하나만 사용해도 ㅇㅋ
아래로는 여담.
반나절동안 블로그에 정리하면서 느낀 건데, ubuntu는 엑셀 대신 LibreOffice Calc를 제공하고 있고 웬만한 단축키와 기능들이 다 동일하지만 가장 중요한 알트 단축키와 동일한 기능을 하는 키가 없는 건지 안 보이는 건지 그렇다.. 생산성이 확 떨어져서 못생긴 기본 표만 사용하고 있었는데, 문득 미리 캔버스가 생각나서 들어가보니 훨씬 가독성 좋은 표를 만들어준다. 정리할 때 표가 필요하다면 한동안 미리 캔버스를 사용할 것.... 아니 근데 진짜 왜 알트 단축키가 없냐.... 정확히 말하면 메뉴에 바로 단축키가 보이는 경우엔 동시에 눌러서 열 수 있는데 이러려면 내가 일일이 메뉴탭을 돌아다녀야 한단 말이지.. 는 근데 보니까 엑셀과 달리 탭마다 아이콘들이 변하는 구조가 아니다. 그래서 없나보네...하... 우분투에서는 그냥 미리캔버스 쓰자 ㅠㅠ
정말 잘 읽었습니다, 고맙습니다!