static : 이 변수는 필드 앞에 붙을 시 객체가 사용하는 필드가 아니라, 클래스에서 사용하는 필드.
Thread : 일을 처리할 때 CPU를 통해서 코드를 실행하는 것.
Multi Thread : 한 프로그램 내에서 쓰레드가 여러 개 존재하는 것.
문제 상황 : 한 함수를 여러 쓰레드가 접근하려고 함 <- 이 경우엔 Synchronized라는 키워드를 사용해서 해결.
Serealizable : 객체를 파일에 쓰거나 읽는 객체를 만들 때
-> 이걸 안 할 때 transient라는 modifier을 씀
volatile : 자바에서 값을 읽어올 때 반드시 메모리에서 값을 읽어 옴.
캐시메모리를 처리하지 않음! -> 멀티쓰레드 환경에서 동시 접근 시 값이 깨지는 경우가 있는데, synchronized 문제가 생기지 않음.
strictfp : 부동소수점 연산은 하드웨어 기능을 이용해 연산함. 하드웨어 연산 장치에 따라 결과가 달라질 수 있음. 하지만 이 modifier로 하드웨어에 상관없이 동일한 결과 출력.
범위 제한자 : private, protected, public, packaged(아무것도 없는 거)
final : 클래스(상속x), 메소드(오버라이딩x), 변수(값 변경 불가).
오직 한 번만 값을 할당함.
super : 상위 클래스를 가리킴.
Polymorphism : 다형성은 다른 형태를 많이 가질 수 있는 성질.
레퍼런스 변수는 다른 여러 형식의 객체를 가리킬 수 있음.
Heterogeneous Collections
: 같은 형태의 객체들의 집합체
Override Method : super에 정의되어 있는 메소드를 sub에서 다시 정의하여 사용함. 메소드 앞에 @Override annotation을 붙임.
abstract를 쓰는 이유?
class 내부에서 함수의 정의만 있고 구현은 없는 함수.
이 메소드가 있는 클래스는 추상 클래스가 됨.
Overloading Method Names :
아규먼트 목록이 서로 달라야 하고, return type이 다를 수도 있음.
Overloading Constructors :
메소드처럼 생성자도 오버로드 시킬 수 있음.
아규먼트 목록은 서로 달라야 함.
해당 생성자에서 this 사용 가능.
Override Constructors :
상위 클래스로부터 생성자는 상속되지 않음.
클래스에 생성자가 들어가는 경우 1) Default 생성자인 경우 2) 프로그래머가 하나 또는 그 이상의 생성자를 명시하는 경우
객체 생성 시 호출 순서 :