도서/스프링 입문을 위한 자바 객체 지향의 원리와 이해

[도서/스프링 입문] #4 자바가 확장한 객체 지향

yulee_to 2023. 1. 14. 18:40

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

✔️ 이 글은 [스프링 입문을 위한 자바 객체 지향의 원리와 이해 - 김종민] 도서를 바탕으로 정리한 글입니다. 


abstract 키워드 - 추상 메소드와 추상 클래스

추상 메소드는 선언부는 있는데 구현부가 없는 메소드를 의미하고, 추상 메소드를 하나라도 갖고 있는 클래스는 반드시 추상 클래스로 선언해야 한다.

추상 클래스는 인스턴스를 만들 수 없고, 하위 클래스에게 메소드 오버라이딩을 강제한다.

 

생성자

생성자를 따로 만들어주지 않으면 자바에서 인자가 없는 기본 생성자를 자동으로 만들어 준다. 인자가 있는 생성자를 하나라도 만든다면 자바는 기본 생성자를 만들어 주지 않는다.

 

클래스 생성 시의 실행 블록, static 블록

static 블록은 클래스가 스태틱 영역에 배치될 때 실행되는 코드 블록으로 한번만 수행된다. 클래스들은 처음 사용될 때 스태틱 영역에 로딩된다. 따라서 사용하지 않는 클래스라면 해당 클래스의 static 블록은 수행되지 않는다.

 

클래스가 처음 사용되는 경우

  • 클래스의 정적 속성을 사용할 때
  • 클래스의 정적 메소드를 사용할 때
  • 클래스의 인스턴스를 최초로 만들 때

자바는 스태틱 영역에 한번 올라가면 프로그램이 종료되기 전까지 메모리를 반환할 수 없지만 최대한 늦게 로딩함으로써 메모리 사용을 최대한 늦추기 위해서 클래스가 처음 사용될 때 스태틱 영역에 로딩된다.


static 블록과 유사한 클래스의 인스턴스 블록

인스턴스 블록은 인스턴스가 생성된 후 자동으로 실행하는 블록으로 중괄호 만으로 묶어준다. 어떤 생성자가 호출되든 그 전에 공통으로 초기화시키고 싶은 작업이 있을 때 인스턴스 블록에서 처리해주면 된다. 한 클래스 안에 여러 개의 인스턴스 변수를 넣을 수 있고 선언된 순서대로 실행된다.

 

final 키워드

final과 클래스

final이 붙은 클래스는 상속이 불가능하다는 의미로 하위 클래스를 만들 수 없다.

 

final과 메소드

final이 붙은 메소드는 오버라이딩이 불가능하다.

 

final과 변수

final이 붙은 변수는 변경 불가능한 상수가 된다.

  • 정적 상수 : 선언 시, 정적 생성자에 해당하는 static 블록 내에서 초기화 가능
  • 객체 상수 : 선언 시, 객체 생성자, 인스턴스 블록에서 초기화 가능
  • 지역 상수 : 선언 시, 최초 한번만 초기화 가능

 

instanceof 연산자

instanceof는 만들어진 객체가 특정 클래스의 인스턴스인지 물어보는 연산자이다.

연산자 앞에는 객체를, 뒤에는 확인할 클래스를 적어주면 되고, 결과값으로는 boolean을 반환한다. instanceof 연산자는 객체 참조 변수의 타입이 아닌 실제 객체의 타입에 의해 처리하기 때문에 상위 클래스 타입의 객체로 선언해도 실제 객체의 타입이 그 하위 클래스라면 상위 클래스와 하위 클래스 모두 true를 반환한다.

 

package 키워드

package 키워드는 네임스페이스(이름공간)을 만들어주는 키워드로 폴더와 비슷한 개념이라고 생각하면 된다.

 

interface 키워드와 implements 키워드

인터페이스는 public 추상 메소드와 public 정적 상수만 가질 수 있어 public, static, abstract, final 키워드를 붙이지 않아도 자동으로 자바가 알아서 붙여준다.

Java 8부터는 인터페이스에 디폴트 메소드라고 하는 구현되어 있는 메소드를 추가해줄 수 있게 되었다.

 

this 키워드

this는 객체가 자기 자신을 지칭할 때 쓰는 키워드이다.

  • 지역 변수와 속성(객체 변수, 정적 변수)의 이름이 같은 경우 지역 변수가 우선한다.
  • 객체 변수와 이름이 같은 지역변수가 있는 경우 객체 변수 사용시 this를 써준다.
  • 정적 변수와 이름이 같은 지역변수가 있는 경우 정적 변수 사용시 클래스명을 접두사로 써준다.

 

super 키워드

super는 바로 위 상위 클래스의 인스턴스를 지칭하는 키워드이다.

super.super로 상위 클래스의 상위 클래스에는 접근이 불가능하다.

 

객체의 멤버 메소드

객체 멤버 메소드는 각 객체별로 달라지는 것이 아니라 하나만 있어도 된다.

JVM은 지능적으로 객체 멤버 메소드를 스태틱 영역에 단 하나만 보유해 그 메소드를 호출할 때마다 this 객체 참조 변수를 넘긴다. 

728x90