자바와 객체 지향 3

JunSeong_Park·2022년 12월 26일
0

객체 지향의 4대 특성 설명하면 끝난 것 아닌가요라고 하기엔 자바와 객체 지향이 내가 설명하고자하는 것이니 자바가 확장한 객체 지향에 대해 조금 더 알아보자



abstract 키워드

abstract method

선언부는 있는데 구현부가 없는 메소드

abstract class

추상 메소드를 하나라도 갖고 있는 클래스여야 하지만,
추상 메소드가 없어도 추상 클래스 선언 가능

어떤 클래스의 메소드를 초기화할 수 없을 때 / 만약 실수로 인스턴스화하면 안되는 클래스의 객체를 만들 때
=> 동물 객체는 어떻게 울어야 하지? / 누가 실수로 동물 객체를 만들면 어떡하지?


어떤 클래스 참조 변수 배열로 다양한 하위 클래스들에서 오버라이딩할 메서드를 클래스에 선언해줘야할 때 ( overriding을 위해 )
=> 동물 참조 변수 배열로 모든 동물을 울게 하려면 하위 클래스에서 오버라이딩할 울어보세요() 메서드가 동물 클래스에 필요할 때

자 위와 같은 클래스들이 있다고 가정할 때 (쥐를 예시로 보여줬으니 나머지 클래스 구조도 알 것이라 생각한다)아래와 같은 반복문을 통해서 간결하게 출력하기 위해서 필요한 것이다 만약에 없다면 배열로써 관리는 어떻게 해야할까..엄청난 노가다를 반복할 것이다 그것이 abstract 의 사용 이유이다.

추상 클래스의 단점을 써보자

  • 추상 클래스는 인스턴스, 즉 객체를 만들 수 없다
  • 추상 메서드는 하위 클래스에게 메서드의 구현을 강제한다
  • 추상 메서드를 포함하는 메서드는 반드시 추상 클래스이다


생성자

클래스의 인스턴스, 만들 때마다 new 키워드를 사용
클래스 명과 같고 반환값이 없는 메서드를 객체를 생성하는 메서드 = 객체 생성자 메서드 => 줄여서 생성자 라고함

펭귄 뽀로로 = new 펭귄();

생성자는 너무도 기본적인 것이기에 까먹거나 헷갈리기 쉬운 특징들만 간략하게 짚고 넘어가겠다

  • 개발자가 아무런 생성자도 만들지 않으면 자바는 인자가 없는 기본 생성자를 자동으로 만들어준다
  • 인자가 있는 생성자를 하나라도 만든다면 자바는 기본 생성자를 만들어 주지 않는다
    정말 간략하게 정리를 잘 해놨다



static 블록

클래스 생성자는 존재하지 않지만 클래스가 스태틱 영역에 로딩될 때, 실행되는 코드 블록

아래와 같은 예시를 들어보자

maiin 메서드 시작
동물 클래스 레디 온

아직까진 static 블록의 역할이 와닿진 않는다 한가지 예시를 더 들어보겠다
자 위와 같은 경우는 어떻게 될까

main 메서드 시작!
Animal class ready on!
0

자 대충 정리가 된다 적어도 클래스가 직접 언급이 될 때 사용이 된다고 유추가 가능하다..이제 바로 정리에 들어가면

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

명심할 것은 딱 하나이다 위 경우들이 발생했을 시점에 단 한번만 실행이 된다..위의 설명을 보면 클래스가 스태틱 영역에 로딩될 때 실행된다고 했는데 그렇다면 왜 클래스는 시작부터 바로 스태틱 영역에 할당되지 않고 위의 경우들이 발생했을 때 로딩이 될까?라는 의문을 가질 수 있다..
=> 이는 스태틱 영역 또한 메모리이기 때문이다.
메모리는 최대한 늦게 사용을 시작하고 최대한 빨리 반환하는 것이 정석이며, 스태틱 영역에 한번 올라가면 프로그램이 종료되기 전까지 해당 메모리를 반환 못한다는 특성 또한 있기 때문이다


final 키워드

final 과 클래스

final 이 붙은 클래스는 하위 클래스를 만들 수 없다 끝

final 과 변수

final 이 붙은 변수도 간략하게 정리하겠다

  • 정적 상수 선언 시에, 또는 정적 생성자에 해당하는 static 블록 내부에서 초기화 가능
  • 객체 상수 선언 시에, 또는 객체 생성자 또는 instance 블록 {} 에서 초기화 가능
  • 지역 상수 선언 시에, 또는 최초 한번만 초기화 가능

final 과 함수

final 이 붙은 함수는 overriding 재정의가 금지된다



instranceof 연산자

instanceof 연산자는 만들어진 객체가 특정 클래스의 인스턴스인지 물어보는 연산자다.
=> 중요 : 객체 참조 변수의 타입이 아니라 실제 객체의 타입에 의해 처리
Ex) 동물, 조류 extends 동물, 펭귄 extends 조류
위 같이 3개의 클래스가 있다고 치자..그런 경우
위와 같이 실행하면 결과가 어떻게 나올까?

정답은 전부 true 이다

위의 중요 표시한 내용의 의미를 잘 생각해보자



this 키워드

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

부연 설명을 조금 붙이자면 어떤 메소드 안에서 지역 변수 혹은 파라미터와 객체의 멤버 변수의 이름이 중복될 시에 객체 멤버 변수의 이름을 지정할 수 있다

super 키워드

단일 상속만을 지원하는 자바에서 super 는 바로 위의 상위 클래스의 인스턴스를 의미

말 그대로이다 주의할 점 하나만 알려주자면 부모의 부모 클래스로 접근하고자 한다해도 super.super 같은 방식으로 키워드를 중첩시킬 수 없다




사실 이미 다 아는 내용들이 대부분이고 복습하는 기분으로 가볍게 보고 있긴 하지만 막상 정리하려니 어떻게 설명해야 중점을 잘 파악할까 핵심은 뭘까란 고민을 많이 하게된다.. 지금은 여행와서 숙소에서 급히 쓰는거라 내용이 정확하지 않을 수 있고 이전 글들도 100퍼센트 정답이라고 생각하진 않는다 그럼에도 글을 쓰는 이유는 누군가의 도움이 되길 바람과 동시에 누군가의 조언 또한 바라기 때문이다..어제도 얘기하지만 오늘도 어김없이 이 책을 추천한다

출처 : 스프링 입문을 위한 자바

profile
안녕하세요 언어에 구애 받지 않는 개발자가 되고 싶은 박준성입니다

0개의 댓글