TIL #5 220131

Subeeen·2022년 1월 31일
0

Today I Learned

목록 보기
5/18
post-thumbnail

<스프링 입문을 위한 자바 객체지향의 원리와 이해> 4장
자바가 확장한 객체지향 파트를 읽고 정리해보려 한다.

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

추상 메서드는 간단히 선언부는 있는데 구현부가 없는 메서드를 말한다.
추상 메서드를 하나라도 갖고 있는 클래스는 반드시 추상 클래스로 선언해야 한다.
추상 메서드 없이도 추상 클래스를 선언할 수는 있다.

  • 추상 클래스는 인스턴스, 즉 객체를 만들 수 없다. new를 사용할 수 없다!
  • 추상 메서드는 하위 클래스에게 메서드의 구현을 강제한다. 오버라이드 강제!
  • 추상 메서드를 포함하는 클래스는 반드시 추상 클래스여야 한다!

생성자

클래스의 인스턴스, 즉 객체를 만들 때 마다 new 키워드를 사용한다.

동물 뽀로로 = new 동물();

자바는 기본 생성자를 자동으로 만들어준다. 필요하다면 인자를 받는 생성자를 만들 수도 있다. 그러나 인자가 있는 생성자를 하나라도 만든다면, 기본 생성자를 만들어주지 않는다.

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

클래스 정보는 해당 클래스가 코드에서 맨 처음 사용될 때 T메모리의 스태틱 영역에 로딩되며, 이 때 단 한 번 해당 클래스의 static 블록이 실행된다. 클래스가 제일 처음 사용될 때는 세 가지 경우가 있다.

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

왜 프로그램이 실행될 때가 아니라 해당 클래스가 처음 사용될 때 로딩하는가?
: 스태틱 영역도 메모리이기 때문! 메모리는 최대한 늦게 사용을 시작하고, 최대한 빨리 반환하는 것이 좋다.

final 블록

클래스에 final 이 붙은 경우

: 상속을 허락하지 않는다. 하위 클래스를 만들 수 없다.

변수에 final 이 붙은 경우

: 변경 불가능한 상수가 된다. 한 번 초기화되면 값을 변경할 수 없다.

메서드에 final 이 붙은 경우

: 재정의, 즉 오버라이딩을 금지하게 된다.

public class 동물 {
 final void 숨쉬다(){
    	System.out.println("호흡 중");
    }
    
 class 포유류 extends 동물 {
  void 숨쉬다() { //error: Cannot override the final method from 동물
  	System.out.println("호흡 중");
  }
 }  
}

instanceof 연산자

인스턴스는 클래스를 통해 만들어진 객체이다. instanceof 연산자는 만들어진 객체가 특정 클래스의 인스턴스인지 물어보는 연산자이다. 결과로 true 또는 fals를 반환한다.

객체_참조변수 instanceof 클래스명

instanceof 연산자는 클래스들의 상속 관계뿐만 아니라 인터페이스의 구현관계에서도 동일하게 사용된다.

interface 키워드와 implements 키워드

인터페이스는 추상 메서드와 정적 상수만 가질 수 있기에 따로 메서드에 public 과 abstract 속성에 public과 static,final을 붙이지 않아도 자바가 알아서 붙여준다. !하지만 코드를 짤 때는 명확하게 붙이는 것이 좋다.

람다

람다란 함수를 의미하고, 변수에 할당할 수 있다. 함수는 로직이다. 즉

람다는 변수에 저장할 수 있는 로직이다!

변수는 값을 저장할 수 있고, 메서드의 인자로 쓰일 수 있고, 메서드의 반환값으로 사용할 수 있다. 그래서 람다로 인해 변수에 로직을 저장할 수 있고, 로직을 메서드의 인자로 쓸 수 있고, 로직을 메서드의 반환값으로 사용할 수 있다.

this 키워드

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

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

super 키워드

단일상속만을 지원하는 자바에서 super는 바로 위 상위 클래스의 인스턴스를 지칭하는 키워드다.
! super 키워드로 바로 위의 상위 클래스 인스턴스에는 접근할 수 있지만, super.super 형태로 상위의 상위 클래스의 인스턴스에는 접근이 불가능하다.

profile
백엔드 개발 공부 중!

0개의 댓글