Java 강의 -객체 지향 문법 2 [즐거운 자바 강좌]

·2023년 7월 21일

java 공부

목록 보기
3/13
post-thumbnail

클래스 필드 (static 필드)

  • 클래스 정보 자체는 정적
    메인을 실행할 때 ( Person p1 = new Person; 같은 코드를 실행)
    클래스 있는지 찾고 클래스 정보를 메모리에 올리게 되는데, 이때 클래스에 static 필드 있나 살펴봄, static 필드는 메모리의 정적 영역에 따로 저장된다.
  • 클래스 변수라고도 부른다.
  • static한 필드는 인스턴스를 만들지 않아도 사용 가능 어떻게?
    ->클래스 명.필드(메소드) (); 형식으로
    -static블록에서 static 필드를 초기화할 수 있다.

클래스 메소드에서 인스턴스 필드를 사용하지 못하는 이유를 알아보자.
static block 사용방법을 알아보자

  • 메모리에 생성되는 시점이 다르기 때문에
  • static한 메소드 안에서는 static한 필드만 사용 가능!

main 메소드 보다 먼저 실행되는 static 블록

자바의 메모리 영역에 대한 가벼운 설명 & 인스턴스 생성

  • new 연산자를 사용할 때마다 메모리에 인스턴스가 생성된다.

  • 인스턴스는 더 이상 참조되는 것이 없을 때, 나중에 (언제가 될지 모른다. 보통 메모리가 부족할 때) 가비지 컬렉션 (Garbage Collection)된다.
    -static한 필드는 클래스가 로딩될 때 딱 한번 메모리에 올라가고 초기화 된다.

  • 인스턴스 메소드(static이 안 붙은 메소드)는 인스턴스를 생성하고 나서 레퍼런스 변수를 이용해 사용할 수 있다.

  • 클래스 메소드는 클래스명.메소드명()으로 사용가능하다.

  • 메소드 안에서 선언된 변수들은 메소드가 실행될 때 메모리에 생성되었다가, 메소드가 종료될 때 사라진다.

추상화란?

  • 중요한 것은 남기고, 불필요한 것은 제거한다.

캡슐화란?

  • 관련된 것을 잘 모아서 가지고 있는 것

좋은 객체란?

  • 좋은 객체는 응집도는 높고 객체와 객체간의 결합도는 낮다.
    +응집도 : 관련된 기능을 잘 모아서 가지고 있는 것

다형성 (Polymorphim)

  • 메소드 오버로딩

    • 메서드의 이름은 같고 매개변수의 갯수나 타입이 다른 함수를 정의하는 것을 의미한다.
    • 리턴값만을 다르게 갖는 오버로딩은 작성 할 수 없다.
  • 메소드 오버라이딩

    • over + ride = 올라 타다

    • 상위 클래스의 메서드를 하위 클래스가 재정의하는 것이다.

    • 메서드 이름, 타입, 변수 개수 동일해야한다.

    • 주로 상위 클래스의 동작을 상속 받은 하위 클래스에서 변경하기 위해 사용된다.

    • 📕 메소드가 오버라이딩 되면 무조건 자식의 메소드가 실행된다.

    • 오버라이딩을 필드와 메소드 다 했다면, 필드는 Type을 따라가고, 메소드는 오버라이딩된 자식의 메소드가 실행된다. 즉, 메소드 오버라이딩만 기억하자

      • Car c1 = new Bus();
        // 필드 i 변수가 오버라이딩 됐다면 Car의 i가 출력
        메서드 run()이 오버라이딩 됐다면 Bus의 run()이 실행
  • 👀 그림 ( 업캐스팅, 오버라이딩, 다운캐스팅 정리 )

패키지

  • 클래스는 패키지를 이용하여 관련된 클래스들 관리한다. 자바에서 패키지는 폴더와 거의 같은 기능을 제공한다고 생각하면 된다.
  • 패키지 이름 규칙
    패키지 이름은 보통 도메인 이름을 거꾸로 적은 후에 프로젝트 이름 등을 붙여서 만들게 된다.
  • 패키지 구조는 아키텍처에 따라 달라진다.
  • 특정 패키지의 클래스를 사용할 때는 import해서 사용한다.
    • 같은 이름의 클래스를 사용할 땐, 하나는 import 사용하고 또 다른 하나는 클래스명 앞에 패키지 명까지 붙여서 사용해야한다.

상속

  • 상속은 굉장히 강한 결합이다. 반드시 써야 할 때만 쓰고 되도록 사용 안 하는 것이 좋다. 결합도는 낮추고, 응집도는 높이는 것이 좋기 때문이다.

  • 부모 타입으로 자식 타입을 참조할 수 있다. (업캐스팅)

EX.
  Car car = new Bus(); 
  : 내가 운전하는 것은 버스인데 자동차의 기능만 사용할거야
  • 오버라이딩
    • over + ride = 올라 타다
    • 상위 클래스의 메서드를 하위 클래스가 재정의하는 것이다.
    • 메서드 이름, 타입, 변수 개수 동일해야한다.
    • 주로 상위 클래스의 동작을 상속 받은 하위 클래스에서 변경하기 위해 사용된다.
    • 위와 같이 업캐스팅 경우를 포함해서 메소드가 오버라이딩 되면 무조건 자식의 메소드가 실행된다.
    • 필드는 오버라이딩 되지 않는다.
      • 정보 은닉(information hiding)은 객체지행의 중요한 기법이다. 중요한 필드는 은닉하고, 필드는 메소드를 통해서만 접근해서 사용하도록 한다.
  • Setter과 Getter

    • private 접근자인 필드 부분을 셋팅해주고 출력해주는 함수
    • Spring 프레임 워크 배울 때 Setter과 Getter를 Price프로퍼티라고 한다.
    • 필드와 프로퍼티의 차이점은?
    -> 필드는 클래스가 가지는 것, 프로퍼티는 getter, setter 말하는 것
  • Object의 오버라이딩 하라고 제공하는 toString(), equals(), hashCode() 메소드

    • Object의 특성

      • 모든 클래스에 강제로 상속된다.
      • 모든 객체에게 공통적으로 있어야 할 메소드를 포함한다.
    • 객체를 문자열로 변환하는 메소드 toString()
      to String() 특성
      : '객체+문자열'연산 or 객체 출력하는 경우, Object의 toString()자동으로 출력된다.
      EX.
      Car c1 = new Car();
      System.out,println(c1); // Object의 toString() 출력

      🚩 즉 개발자는 클래스를 작성할 때, Object의 toString()을 오버라이딩하여 자신만의 문자열을 리턴할 수 있다.

    • 두 객체의 내용이 같은지 비교하는 메소드 equals()
      == 연산자와 equals() 의 차이
      -> ==은 두 레퍼런스가 동일한 객체를 가리키는지 비교, equals()는 두 객체의 내용물이 같은지 비교

      🚩 사실, 내용 동일의 기준은 작성자마다 다르기에 작성자가 equals() 메소드를 오버라이딩 하는 것이 원칙이다.

profile
기회를 잡기 위해 준비하자 !

0개의 댓글