자바와 객체지향

개발자 로그·2021년 5월 24일
0

객체지향 == 인간지향

종래의 절차 지향 프로그래밍은 기계어 중심으로, 사람이 이해하기 힘든 부분이 많았다.

때문에 "우리가 보고 느끼고 생활하는 현실 세계처럼 프로그래밍할 수 없을까?"라는 고민 속에 객체 지향의 개념이 탄생함

  • 객체 지향의 4대 특성 : 캡슐화, 상속, 추상화, 다형성

클래스 vs 객체

  • 클래스
    • 분류에 대한 개념 ( 실체 X )
    • 분류, 집합. 같은 속성과 기능을 가진 객체를 총칭하는 개념
  • 객체
    • 실체 O
    • 세상에 존재하는 유일무이한 사물

ex ) 사람, 펭귄 → 클래스 / 김연아, 뽀로로 → 객체


추상화 : 모델링

구체적인 것을 분해해서 관심영역에 있는 특성만 가지고 재조합 하는것 ( → 모델링 )

  • 객체 : 세상에 존재하는 유일무이한 사물
  • 클래스 : 분류, 집합 같은 속성과 기능을 가진 객체를 총칭하는 개념

추상화와 T메모리(JVM의 메모리)

JVM메모리 : https://www.notion.so/JAVA-71d400ac783145be9188eba27fe31abb

  • Static 변수 ( 클래스 맴버 · 속성, 정적 변수, 정적 속성) → Static 영역
  • 인스턴스 변수 ( 객체 맴버 · 속성, 객체 변수 ) → Heap 영역
  • local 변수 ( 지역 변수 ) → Stack 영역

초기화

  • 객체 멤버 : 생성자를 통해 초기화
  • 정적 멤버 : 정적 실행 영역을 통해 기본값으로 초기화 된다

상속 : 재사용 + 확장

상위 클래스의 특성을 하위 클래스에서 상속하고 거기에 필요한 특성을 추가, 즉 확장해서 사용할 수 있다는 의미

  • 객체지향의 상속은 상위 클래스의 특성을 재사용하는 것이다.
  • 객체지향의 상속은 상위 클래스의 특성을 확장하는 것이다.
  • 객체지향의 상속은 is a kind of 관계를 만족해야한다.
    ex) 펭귄은 동물의 한 분류다.
  • 상위 클래스에서 구현한 메서드는 하위 클래스에서 사용할 수 있다
    → 클래스 상속 구조에서 최상의 클래스는 Object이다. 따라서, 모든 클래스는 Object의 특성을 물려받는다. ( toString()메서드 사용 가능 )
  • 구현 클래스 is able to 인테페이스 → 구현클래스는 인테페이스 할 수 있다
    ex) 고래는 헤엄칠 수 있다.

  • 펭귄 class가 동물 class를 상속받은 경우, 인스턴스를 생성하면 펭귄(sub) class의 인스턴스만 힙 영역에 생성되는 것이 아니라, 동물(super) class의 인스턴스도 함께 생성된다.

⭐ 상위 클래스는 물러줄 특성이 풍성할 수록 좋고, 인터페이스는 구현을 강제항 메서드의 개수가 적을 수록 좋다.


다형성 : 사용편의성

오버라이딩

  • 같은 인자 목록으로 상위 클래스의 메서드를 재정의 ( ride 올라타다 )
  • 하위 클래스가 재정의한 메서드를 알아서 호출해 줌으로 형변환이나 instanceod 연산자를 써서 하위 클래스가 무엇인지 신경쓰지 않아도 됨
  • 상위 클래스 타입의 객체 참조 변수에서 하위 클래스가 오버라이딩한 메서드를 자동 호출해 줌으로써 깔끔한 코드 유지 가능

오버로딩

  • 같은 메서드 이름, 다른 인자 목록으로 다수의 메서드 중복정의 ( load 적재하다 )
  • 함수명 하나로 인자 목록만 다르게 하면 되므로 편리

⭐ 상위 클래스 타입의 객체참조 변수를 사용하더라도 하위 클래스에서 오버라이딩한 메서드가 호출된다.


캡슐화 : 정보은닉

public - 모두
protected - 상속 / 같은 패키지 내의 클래스
[ default ] - 같은 패키지 내의 클래스
private - 해당 클래스

  • 상속을 받지 않았다면 객체 멤버는 객체를 생성한 후 객체 참조 변수를 이용해 접근해야함
  • 정적 멤버는 '클래스명.정적 멤버' 형식으로 접근하는 것을 권장

참조 변수의 복사

  • Call by Value( 값에 의한 호출 ) , Call by Reference ( 참조에 의한 호출 )
    → 기본 자료형 변수는 저장하고 있는 값을 그 값 자체로 판단하고, 참조 변수는 저장하고 있는 값을 주소로 판단한다.

자바가 확장한 객체 지향

abstract - 추상 메서드 & 추상 클래스

  • 추상 클래스는 객체를 만들 수 없다. → new를 사용할 수 없다.
  • 추상 메서드는 하위 메서드에게 메서드 구현을 강제한다. ( 오버라이딩 강제 )
  • 추상 메서드를 포함하는 클래스는 반드시 추상 클래스여야 한다.

생성자

  • 개발자가 아무런 생성자도 만들지 않으면 자바는 인자가 없는 기본 생성자를 자동으로 만들어준다.
  • 인자가 있는 생성자를 하나라도 만든다면 자바는 기본 생성자를 만들어 주지 않는다.

final

  • final 키워드가 나타날 수 있는 3군데 → 클래스, 변수, 메서드
    • final 클래스 : 상속 불가
    • final 변수 : 변경 불가능한 상수가 됨
    • final 메서드 : 오버라이딩 금지

instanceof 연산자

  • 만들어진 객체가 특정 클래스의 인스턴스인지 물어보는 연산자
  • LSP를 어기는 코드에서 주로 나타나는 연산자이므로, 리팩터링 대상인지 아닌지 점검해 봐야한다.

interface & implement

  • 인터페이스는 public 추상 메서드와 public 정적 상수만 가질 수 있다.
    → 메서드에 public과 static, final을 붙이지 않아도 자동으로 자바가 알아서 붙여줌

this

  • 객체가 자신을 지칭할 때 사용
profile
성장하는 개발자

0개의 댓글