이 포스팅은 김종민, ⌜스프링 입문을 위한 자바 객체 지향의 원리와 이해⌟ 을 읽고 정리했습니다.
객체지향을 확장하기 위해 자바가 사용하는 키워드
추상메서드: 선언부는 있는데 구현부가 없는 메서드
추상클래스
new
키워드 사용 불가= 객체 생성자 메서드 : 반환값이 없고 클래스명과 같은 이름을 가진 메서드
// 객체 생성 시 new 키워드 사용,
Animal dog = new Animal();
-------- 생성자
public class Animal {
private String name;
public Animal() {} // 기본생성자
public Animal(String name) { // 인자가 있는 생성자
this.name = name;
}
}
클래스 생성 시 실행되는 블록.
클래스가 메모리 스태틱영역에 배치될 때 실행되는 코드블록
static 블록에서 사용 가능한 속성와 메서드는 static 멤버 뿐. 객체 멤버에 접근 불가능. 객체멤버는 객체 생성자를 통해 힙에 생성되기 때문
클래스의 정적 속성에 접근할 때도 static 블록 실행됨
public class Animal {
static int age = 1;
static {
System.out.println("Animal ready!");
}
}
public class Driver {
public static void main(String[] args) {
System.out.println("main ready");
System.out.println(Animal.age);
}
}
//---------출력결과---------------
ain ready
Animal ready!
1
//------------------------------
클래스가 코드에서 맨 처음 사용될 때 ( 클래스 정적 속성 사용 시, 정적 메서드 사용 시, 인스턴스 최초 생성 시)
메모리의 스태틱영역에 로딩되고 단 한 번 해당 클래스의 static블록이 실행됨
클래스, 변수, 메서드에 붙일 수 있음
public final class ClassName {...}
: 상속을 허락하지 않겠다!. 하위 클래스 생성 불가final static int AAA;
: 변경 불가능한 상수. 최초 선언 시 초기화 final void run() {...}
: 오버라이딩 금지 == 재정의 금지만들어진 객체가 특정 클래스의 인스턴스인지 확인. 결과값 true/false 반환
실제 객체 타입에 의해 처리.
객체지향 설계원칙 중 리스코프치환원칙을 어기는 코드에서 주로 나타나는 연산자기 때문에 해당 연산자가 보인다면..! 리팩터링 대상인지 점검 필요
this.name
Animal.name