[스프링 입문을 위한 자바 객체 지향의 원리와 이해] - 3

쓰옹·2023년 5월 14일
0

📙 Java 잡아🤏

목록 보기
25/25

이 포스팅은 김종민, ⌜스프링 입문을 위한 자바 객체 지향의 원리와 이해⌟ 을 읽고 정리했습니다.

객체지향을 확장하기 위해 자바가 사용하는 키워드

abstract 키워드

추상메서드: 선언부는 있는데 구현부가 없는 메서드

  • 추상메서드를 하나라도 갖고있다면 추상클래스로 선언해야함
  • 하위 클래스에게 메서드 구현을 강제함 == 오버라이딩 강제

추상클래스

  • 인스턴스 생성 불가 == new 키워드 사용 불가

생성자

= 객체 생성자 메서드 : 반환값이 없고 클래스명과 같은 이름을 가진 메서드

// 객체 생성 시 new 키워드 사용,
Animal dog = new Animal();
                 -------- 생성자

public class Animal {
	private String name;
    
	public Animal() {} // 기본생성자
    
    public Animal(String name) { // 인자가 있는 생성자
    	this.name = name;
    }
}
  • 아무런 생성자도 만들지 않으면 자바가 기본생성자를 자동으로 만들어줌
  • 인자가 있는 생성자를 하나라도 만들게 되면 기본생성자 자동생성 안됨

static 블록

클래스 생성 시 실행되는 블록.
클래스가 메모리 스태틱영역에 배치될 때 실행되는 코드블록
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블록이 실행됨

final 키워드

클래스, 변수, 메서드에 붙일 수 있음

  • public final class ClassName {...} : 상속을 허락하지 않겠다!. 하위 클래스 생성 불가
  • final static int AAA; : 변경 불가능한 상수. 최초 선언 시 초기화
  • final void run() {...} : 오버라이딩 금지 == 재정의 금지

instanceof 연산자

만들어진 객체가 특정 클래스의 인스턴스인지 확인. 결과값 true/false 반환
실제 객체 타입에 의해 처리.
객체지향 설계원칙 중 리스코프치환원칙을 어기는 코드에서 주로 나타나는 연산자기 때문에 해당 연산자가 보인다면..! 리팩터링 대상인지 점검 필요

this 키워드

  • 지역변수와 속성의 이름이 같은 경우 지역변수 우선
  • 객체 변수와 이름이 같은 지역변수가 있는 경우 객체변수를 사용하려면 this를 접두사로 사용. this.name
  • 정적변수와 이름이 같은 지역변수가 있는 경우 정적변수를 사용하려면 클래스명을 접두사로 사용. Animal.name
profile
기록하자기록해!

0개의 댓글