OOP 핵심정리

  • 캡슐화
  • 상속
  • 추상화
  • 다형성

OOP의 장점

  • 유지보수 Easy
  • 재사용성 ⬆️
  • 중복제거 Easy

OOP 작성 순서

  • 클래스 생성 (설계도 작성)
  • 인스턴스 생성 (제품 생성)
  • 인스턴스 사용 (제품 사용)

클래스 : 변수를 정의한 것

  • 설계도
  • 변수 + 메서드
  • 사용자 정의 타입

변수 : iv의 집합 (속성+기능)

메서드 : 명령문의 집합

선언 위치에 따른 변수의 종류

클래스 영역

  • class variable : 인스턴스 생성 없이 사용가능. 클래스가 메모리에 로드되었을 때 생성.
  • instance variable : 인스턴스 생성 후 사용가능. 인스턴스가 생성되었을 때 생성.

메서드 영역

  • local variable : 메서드 종료시 사라짐. 변수 선언문이 수행되었을 때 생성.

메서드 : 값을 받아서 처리하고 결과를 리턴한다

메서드의 장점

  1. 재사용성 ⬆️
  2. 중복제거 Easy
  3. 관리, 이해 Easy

매개변수의 유효성 검사 : 유효하지 않은 값이 들어오면

  1. 값 보정
  2. return문으로 작업 중단

기본형 매개변수와 참조형 매개변수

기본형 매개변수 : Read Only

참조형 매개변수 : Read & Write

JVM의 메모리 구조

Method Area : 클래스에 대한 정보를 저장하는 공간

Call Stack : 메서드 수행 시 필요한 메모리를 제공하는 공간, 메서드 종료 시 할당된 메모리 반환

Heap : 인스턴스가 생성되는 공간

인스턴스 메서드와 클래스 메서드

인스턴스 메서드 : 인스턴스 생성 후, 인스턴스 멤버(iv, im)와 관련된 작업을 하는 메서드

클래스 메서드 : 인스턴스 생성 없이, 인스턴스 멤버와 관련없는 작업을 하는 메서드. iv 사용 불가

오버로딩 : 이름이 같은 메서드를 여러번 정의한 것

오버로딩의 조건

  1. 이름이 같아야 한다.
  2. 매개변수의 타입 / 개수가 달라야 한다.
  3. 반환 타입은 상관없다.

오버라이딩 : 상속받은 메서드를 자손 타입에 맞게 내용을 변경한 것

오버라이딩의 조건

  1. 선언부가 일치해야 한다
  2. 접근 제어자를 조상보다 좁게 설정할 수 없다.
  3. 예외를 조상보다 많이 선언할 수 없다.

생성자 : 인스턴스 생성시마다 호출되는 인스턴스 초기화 메서드

생성자의 조건

  1. 생성자 이름 == 클래스 이름
  2. 리턴값 존재하지 않는다(그래서 앞에 void 자동 생략됨)
  3. 모든 클래스는 반드시 한 개 이상의 생성자를 갖는다.

생성자 this()

  • 같은 클래스에서 다른 생성자를 호출할 때 클래스 이름대신 this() 선언
  • 반드시 첫 줄에서 호출해야 한다.

참조변수 this

  • lv와 iv의 이름이 같을 때 구별하려고 사용
  • 인스턴스 자신을 가리키는 참조변수
  • 인스턴스 메서드 내에서만 사용가능

변수의 초기화 순서 : cv ⇒ iv

  1. 자동 초기화 (0)
  2. 명시적 초기화(간단 초기화, ())
  3. 초기화 블럭 (복잡 초기화, {})
  4. 생성자 (복잡 초기화, {})

상속 ( ~는 ~이다)

  • 기존 클래스로 새로운 클래스 작성
  • 자손은 조상의 모든 멤버를 상속받는다.
  • 자손의 변경은 조상에 영향을 주지 못한다.

포함( ~는 ~를 가지고 있다)

  • 클래스 멤버로 다른 클래스타입의 참조변수 선언

생성자 super()

  • 조상의 멤버 호출 시 사용. 자손의 생성자는 자신이 선언한 변수만 초기화 가능하다.
  • 반드시 첫 줄에서만 사용해야 한다.

참조변수 super

  • 조상의 멤버와 자신의 멤버를 구별하려고 사용한다.

import문 : 컴파일러에게 패키지가 속할 클래스를 알려준다

static import : 클래스 이름 생략이 가능하다.

제어자(modifier) : 클래스와 클래스 멤버에 부가적인 의미 부여

static : 공통적인, 클래스의

  • 클래스 : 객체 생성 없이 사용 가능

final : 불변의, 마지막의

  • 클래스 : 변경, 확장불가능. 자손 x
  • 메서드 : 오버라이딩이 불가능한 메서드
  • 변수 : 상수

abstract : 추상의, 미완성의

  • 클래스 : 미완성 설계도
  • 메서드 : 몸통이 없는 메서드

접근 제어자(Access Modifier)

  1. 외부로부터 내부 데이터 보호
  2. 내부적으로만 쓰이는, 불필요한 부분 감춤
  3. 한 가지 접근 제어자만 사용 가능
  같은 패키지 같은 클래스 자손 클래스 전체
public O O O O
protected O O O  
default O O    
private O      

다형성

  • 참조변수가 사용할 수 있는 멤버의 개수 ≤ 인스턴스 멤버의 개수
  • 조상 타입의 참조변수로 자손 타입의 객체 사용가능
  • 하나의 배열에 여러 종류의 객체 저장가능

참조변수의 형변환

  1. 사용할 수 있는 멤버의 개수 조절
  2. 조상과 자손 관계만 형변환 가능
  3. 기능 多 ⇒ 少 안전

instanceof 연산자 : 형변환이 가능한 경우 true 반환

추상 클래스

  • 미완성 설계도
  • 미완성 메서드 존재
  • 인스턴스 생성 불가

추상 클래스의 장점

  • 설계도 작성 Easy
  • 유지보수 Easy
  • 재사용성 ⬆️
  • 중복제거 Easy

추상 클래스의 완성

  • 추상 메서드 상속
  • 추상 메서드 구현부 작성

추상 메서드

  • 몸통이 없는 메서드
  • 자손마다 다르게 구현된다.
  • 모두 구현해야 완성된다.
  • 여러 클래스의 공통 부분
  • 충돌해도 문제가 생기지 않는다.

추상화

  • 공통부분 뽑아내기
  • 덜 구체적으로 만드는 것

인터페이스

  1. 추상 메서드의 집합. 껍데기
  2. 모든 멤버가 public
  3. 모든 멤버가 미완성
  4. 조상은 인터페이스만 가능
  5. 다중상속 가능
  6. iv 사용불가

인터페이스의 구현

  • 추상 메서드 모두 구현
  • 일부 구현시 abstract 붙여야 함

인터페이스의 다형성

  • 인터페이스 타입 참조변수 ⇒ 구현한 놈만 들어와라
  • retrun 타입이 인터페이스 ⇒ 구현한 놈 반환

인터페이스의 장점

  • 개발시간 단축
  • 표준화 가능
  • 관계없는 클래스에 관계생성 가능
  • 독립적인 프로그래밍 가능

 

+ Recent posts