04. 자바가 확장한 객체 지향

prana·2023년 11월 21일

JAVA

목록 보기
3/8
post-thumbnail

질문

  1. 149p - 추상 클래스는 ○○○○, 즉 □□를 만들 수 없는 클래스가 된다.

인스턴스, 객체

  • 동물 객체는 어떻게 울어야 하지? / 실수로 동물 객체를 만들면 어쩌지?
  • 동물 참조 변수 배열로 모든 동물을 울게하려면,
    하위 클래스에서 오버라이딩 할 울어보세요() 메서드가 상위 클래스인 동물 클래스에 필요한데...오버라이딩 강제
  1. 152p - 여기서 컴파일이 나는 이유는?

  • 개발자가 아무런 생성자도 만들지 않으면, 자바는 인자가 없는 기본 생성자를 자동으로 만들어준다.
  • 인자가 있는 생성자를 하나라도 만든다면 자바는 기본 생성자를 만들어주지 않는다.
  1. 153p - 객체 생성자가 있다면 클래스 생성자도 있을까?
  • 클래스 생성자는 존재하지 않는다.
    그러나 클래스가 스태틱 영역에 배치될 때 실행되는 코드블록이 있다. static 블록이다.
  1. 157p - 왜 프로그램이 실행될 때 클래스들의 정보를 T 메모리의 static 영역에 로딩하지 않고, 해당 클래스가 처음 사용될 때 로딩할까?

  • 스태틱 영역도 메모리이다. 메모리는 최대한 늦게 사용을 시작하고 빨리 반환하는 것이 정석이다.
  • 물론 자바는 스태틱 영역에 한번 올라가면 프로그램이 종료되기 전까지는 해당 메모리를 반환할 수 없지만 그럼에도 최대한 늦게 로딩함으로써 메모리 사용을 최대한 늦추기 위함이다.
    • 클래스 정보는 해당 클래스가 코드에서 맨 처음 사용될 때 T메모리의 스태틱 영역에 로딩되며, 이때 단 한번의 해당 클래스의 static블록이 실행된다.
  1. 158p - 최종이라는 의미를 갖는 final 키워드가 나타날 수 있는 딱 세 군데는?
  • 클래스, 변수, 메서드
  1. 162p - instanceof에서 객체 참조 변수 타입이 아닌 실제 00의 타입에 의해 처리한다.

객체

  1. 164p - 인터페이스는 public 00 메서드와 public 00 00만 가질 수 있다고 하였다.

추상, 정적 상수

  1. 169p - 출력값은?
    업로드중..

    20, 10

  2. 170p - this와 super의 개념을 설명하세요

  • this가 객체 멤버 메서드 내부에서 객체 자신을 지칭하는 키워드
  • super는 단일 상속만을 지원하는 자바에서, 바로 위 상위 클래스의 인스턴스를 지칭하는 키워드이다.

내용정리

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

  • 선언부는 있는데 구현부가 없는 메서드
  • 추상 메서드를 하나라도 갖고 있는 클래스는 반드시 추상 클래스(Abstract Class)로 선언해야 한다.
package abstractMethod02;

public abstract class 동물{
	abstract void 울어보세요();
}

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

생성자

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

동물 뽀로로 = new 동물(); -> 동물() 클래스명()도 메서드이다.

반환값이 없고 클래스명과 같은 이름을 가진 메서드를 객체를 생성하는 메서드라고 해서 객체 생성자 메서드라 한다. => 생성자 라는 이름으로 더 많이 부른다.

  • 업로드중..
  • 생성자는 개발자가 필요한 만큼 오버로딩해서 만들 수 있다. 생성자로 줄여서 부르지만 정확하게 표현하자면 객체 생성자 메서드라는 점!

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

  • 객체 멤버는 클래스가 static 영역에 자리 잡은 후에 객체 생성자를 통해 힙에 생성된다.
  • 클래스의 static 블록이 실행되고 있을 때는 해당 클래스의 객체는 하나도 존재하지 않기 때문에 static 블록에서는 객체 멤버에 접근할 수 없는 것이다.
    업로드중..
  • 클래스 정보는 해당 클래스가 코드에서 맨 처음 사용될 때 T메모리의 스태틱 영역에 로딩,
    이때 단 한번 해당 클래스의 static 블록이 실행된다.
  • 클래스가 제일 처음 사용될 때는 세 가지 경우 중 하나이다.
    • 클래스의 정적 속성을 사용할 때
    • 클래스의 정적 메서드를 사용할 때
    • 클래스의 인스턴스를 최초로 만들 때

final 키워드

  • 최종, final 키워드가 나타날 수 있는 딱 세 군데는? -> 클래스, 변수, 메서드
    업로드중..
  • 고양이 클래스에 final을 붙이면 상속을 허락하지 않게 된다. 하위 클래스를 만들 수 없게 됨
package OOP.finalVariable;

public class 고양이 {
    final static int 정적상수1 = 1;
    final static int 정적상수2;

    final int 객체상수1 = 1;
    final int 객체상수2;

    static{
        정적상수2 = 2;

        // 상수는 한 번 초기화되면 값을 변경할 수 없다.
        // 정적상수2 = 4;

    }

    고양이(){
        객체상수2 = 2;
        // 상수는 한 번 초기화되면 값을 변경할 수 없다.
        // 객체상수2 = 4;

        final int 지역상수1 = 1;
        final int 지역상수2;

        지역상수2 = 2;

    }
}
  • 정적상수는 선언 시에, 또는 정적 생성자에 해당하는 static 블록 내부에서 초기화가 가능하다.
  • 객체 상수 역시 선언 시에, 또는 객체 생성자 또는 인스턴스 블록에서 초기화할 수 있다.
  • 지역 상수 역시 선언 시에, 또는 최초 한 번만 초기화가 가능하다.
  • 자바에서는 const를 키워드로 등록해두고 쓰지 못하게 하고 있다.

final과 메서드

  • 메서드가 final이라면 최종이니 재정의, 즉 오버라이딩을 금지하게 된다.

instanceof 연산자

  • 클래스를 통해 만들어진 객체,
    만들어진 객체가 특정 클래스의 인스턴스인지 물어보는 연산자이다. boolean타입으로 반환한다.

    객체참조변수 instanceof 클래스명

package 키워드

  • 네임스페이스(이름공간)를 만들어주는 역할.
  • ex)회사의 여러 개발 조직이 하나의 프로젝트에 참여, 고객사업부.Customer와 마케팅사업부Customer라고 지정하면 이름 충돌을 피할 수 있다. 완전 별개가 되는 것이다.

interface 키워드와 implements 키워드

  • 인터페이스는 public 추상 메서드와 public 정적 상수만 가질 수 있다고 하였다.

람다의 개념

  • 오라클에서는 빅데이터와 병렬성 지원을 강화한 자바 8 출시.

  • 람다(Lambda)라는 기능을 언어적으로 추가했다.

  • 정의: 함수를 의미하고, 변수에 할당할 수 있다. 함수는 로직이다. 람다는 변수에 저장할 수 있는 로직이다.

  • 변수는 값을 저장할 수 있고, 메서드의 인자로 쓰일 수 있고, 메서드의 반환값으로 사용할 수 있다.

  • 변수에 로직을 저장할 수 있고, 로직을 메서드의 인자로 쓸 수 있고, 로직을 메서드의 반환값으로 사용할 수 있다는 결론에 도달한다.

this 키워드

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

super 키워드

  • this가 객체 멤버 메서드 내부에서 객체 자신을 지칭하는 키워드
  • super는 단일 상속만을 지원하는 자바에서, 바로 위 상위 클래스의 인스턴스를 지칭하는 키워드이다.

0개의 댓글