코드스테이츠 백엔드 14일차 | 객체지향 프로그래밍 심화1

hyoreal·2022년 7월 11일
0

CodeStates

목록 보기
15/32

오늘부터는 객체지향프로그래밍 심화과정으로 넘어가서 캡!상추다! 를 배우기 시작한다. 캡슐화, 상속, 추상화, 다형성을 공부하는 건데 이게 자바의 심장이라고 하시니 좀 더 진지하게 공부해야겠다.


상속

학습목표
1.상위, 하위클래스의 상속관계의 핵심파악.
2.extend키워드를 사용하여 두개이상의 클래스간의 상속관계정의.
3.포함관계와 상속관계의 차이 이해.
4.메서드 오버라이딩의 정의, 성립조건, 장점 이해.
5.super와 super()의 차이.
6.Object클래스가 자바클래스 상속계층도의 최상단에 위치하는 걸 이해.

  • 상속 : 기존 클래스를 재사용하여 새로운 클래스 생성.
  • 상위클래스의 멤버(필드, 메서드 ,이너클래스)하위 클래스에게 공유하는 것.
  • 사용이유? 코드를 더 적게 사용하기 위해, 다형적 표현 가능.
  • 다형성 : 하나의 객체가 여러 모양으로 표현하는것.
  • 자바의 객체지향프로그래밍에서의 상속은 단일상속만 가능.
  • ~는 ~이다. (IS-A)가 성립하면 상속.
  • ~는 ~를 가지고있다. (HAS_A)가 성립하면 포함관계.
  • 문법
class 자식클래스이름 extend 부모클래스이름 {... }
  • 상위클래스의 접근제어자가 private이거나 default로 설정된 멤버는 상속은 가능하지만 접근은 불가능.

메서드 오버라이딩 (Method Overriding)

  • 메서드 오버라이딩 : 상위 클래스로부터 상속박은 메서드와 동일한 이름의 메서드를 재정의하는것.
  1. 메서드의 선언부(메서드이름, 매개변수, 반환타입)이 상위클래스와 완전히 일치해야함.
  2. 접근제어자의 범위가 상위클래스의 메서드와 같거나 넓어야함.
  3. 예외는 상위클래스의 메서드보다 더 많이 선언가능.

  • 오버로딩과 구분 필수!!
    • 메서드 오버로딩 : 새로운 메소드 정의
    • 메서드 오버라이딩 : 상속받은 기존의 메서드 재정의

super 참조변수, super() 메서드 차이

super : 하위클래스에서 상속받은 상위 클래스의 객체의 멤버값을 참고. (this와 비슷)

  • 인스턴스 메서드서만 사용가능

super() : 상위 클래스의 생성자 호출

  • 생성자 안에서만 사용 가능.
  • 반드시 첫줄.

클래스의 정점, Object클래스

  • Object 클래스는 자바의 클래스 상속계층도의 최상위 클래스.

  • 자바 컴파일러는 아무 상속을 받지 않는 클래스에 자동적으로 Object클래스를 상속받도록 함. (자동으로 extends Object 삽입)

  • java.lang 패키지

    • 자바에서 가장 기본적인 동작을 수행하는 클래스들의 집합.
    • import문을 사용하지 않고 클래스이름만으로 바로 사용 가능.

  • java.lang.Object 클래스

    • java.lang패키지중에서 가장 많이 사용되는 클래스.
    • 필드를 갖지 않고 11개의 메서드로 구성.

  • Object 클래스의 대표적 메서드

    • toString() : 객체정보를 문자열로 출력. String타입 반환

    • equals(Object obj) : 등가비교연산과 동일하게 스택메모리값 비교. boolean형으로 반환.

    • hashCode() : 객체의 위치정보관련. Hashtable이나 HashMap에서 동일 객체 여부 판단. int형으로 반환

    • wait() : 현재 thread 일시정지. void 타입

    • notify() : 일시정지중인 thread 재동작. void타입

    • clone() : 인스턴스 복제 후 새로운 인스턴스 생성 및 반환.
      - 필드값만 복제.
      - 필드값이 배열이나 인스턴스일경우 제대로된 복제 불가능.
      - 이 경우 해당 클래스에서 clone()을 오버라이딩하여 복제가 제대로 이뤄지도록 재정의.
      - 데이터보호를 이유로 Cloneable인터페이스를 구현한 클래스의 인스턴스만 사용가능.


캡슐화

학습목표
1.캡슐화의 핵심 개념과 목적 이해.
2.패키지의 개념, import문 사용법 이해.
3.접근제어자 4가지 이해.
4.데이터 보호수단 getter/setter메서드 이해.

  • 캡슐화 : 특정 객체 안에 관련된 속성과 기능을 하나의 캡슐로 만들어 데이터를 외부로부터 보호하는것
  • 캡슐화 목적 : 정보은닉. 유집보수 및 코드확장 시 오류범위 최소화.
    1. 데이터 보호
    2. 불필요한 외부노출 방지
  • 캡슐화 방법
    • 클래스의 변수를 private로 선언.
    • 변수값을 수정하고 볼 수 있는 공용 setter및 getter메소드 제공.

패키지

  • 패키지(Package) : 특정 목적을 공유하는 클래스와 인터페이스 묶음.

  • 패키지가 있는 경우 소스코드의 첫줄에 package 패키지명을 반드시 표시.

  • 대표적 패키지

    • java.lang : 자바의 기본 클래스들

    • java.util : 확장클래스들

    • java.io : 자바 입출력 관련 클래스

    • java.nio : 자바 입출력 관련 클래스

  • 패키지로 클래스를 묶으면 : 클래스 충돌 방지. 같은 이름의 클래스라도 다른 패키지에 속할 시 충돌발생x.

import문

  • import문 : 다른 패키지 내의 클래스를 사용하기 위함. 일반적으로 패키지구문과 클래스 구문 사이에 작성.

  • import문 문법

import 패키지명.클래스명; //패키지명과 패키지명을 생략하고자 하는 클래스명

import 패키지명.*; // 같은 패키지 여러 클래스명 사용할때.

접근제어자 (Access Modifier)

  • 제어자(Modifier) : 클래스, 필드, 메서드, 생성자 등에 부가적인 의미를 부여하는 키워드. 형용사의 역할(파란 하늘 , 붉은 노을)

    • 접근 제어자 : public, protected, (default), private
    • 기타 제어자 : static, final, abstract, native, transient, synchronized 등
  • 접근 제어자는 각 대상에 대해 단 한번만 사용 가능.

    • private : 동일 클래스에서만 접근가능

    • default : 동일 패키지 내에서만 접근가능

    • protected : 동일패키지 + 다른패키지의 하위클래스에서 접근가능

    • public : 접근제한X.

  • 변수명 앞에 아무런 접근제어자를 붙이지않으면 자동으로 default.

getter / setter 메서드

  • private접근제어자가 포함되어있는 객체 변수의 데이터값을 추가 혹은 수정하고싶을때 getter / setter 사용.

  • setter메서드 : 외부에서 메서드에 접근하여 데이터값을 변경가능하게 함. 메서드명에 set을 붙여서 사용.

  • getter메서드 : setter로 설정한 변수값을 읽어오는데 사용. 메서드명 앞에 get을 붙여서 사용.




생각보다 쉬운듯 하면서도 어려운 내용이다.
그래도 코드를 따라서 써가며 더 빨리 이해했고 실력이 그만큼 상승한것같다.
역시 가장 좋은 공부방법은 직접 코드를 작성하는것같다.

profile
좌충우돌 코린이 성장기

0개의 댓글