객체와 객체지향 4대 특성

SeonKyu KIM·2022년 12월 22일
0

기계어를 일상용어로 표현한 것. 니모닉과 기계어의 일대일 매칭 코드표를 어셈블리.
하지만 cpu마다 기계어가 달랐기 때문에 각자의 어셈블리어도 달랐다.

JVM의 존재와 역할을 아는 것이 자바 개발 환경을 이해하는데 필수적이다.

객체 지향 프로그래밍은 절차적/구조적 프로그램의 어깨를 딛고 있다.

데이터 저장 영역은 3가지, T형태로 구분됨
스태틱 영역, 스택 영역, 힙 영역

스태틱 = 클래스의 놀이터
스택 = 메서드의 놀이터
힙 = 객체의 놀이터

if블록 스택 프레임 존재한다.
외부 스택 프레임에서 내부 스택 프레임의 변수에 접근하는 것은 불가능하나, 그 역은 가능하다.

멀티 스레드 = 스택 영역을 스레드 개수만큼 분할
멀티 프로세스 = 다수의 T 메모리를 갖는 구조


클래스 = 개념
객체 = 실체
붕어빵틀과 붕어빵이라는 식의 이해는 옳지 않다.
클래스 : 객체
사람 : 김연아
펭귄 : 뽀로로
쥐 : 미키마우스
-> 개념(분류)과 실체
객체 = 클래스의 인스턴스 라고도 한다.


객체지향 4대 원칙 - 캡!상추다

추상화

추상화란 구체적인 것을 분해해서 관심 영역에 대한 특성만을 가지고 재조합 하는 것.
즉, 모델링이다.
지구본은 지구를 모델링하고 있다. 하지만 땅의 굴곡, 기후를 지구본에 표현할 수 없고 그럴 필요도 없다.

모델은 사물을 정확히 복제하는게 아니라, 목적에 맞게 관심있는 특성만을 추출해서 표현하는 것!
추상화를 통해 실제 사물을 단순하게 묘사.

이러한 개념은 객체 지향에서 클래스를 설계할 때, 데이터베이스를 설계할 때 필요한 기법이다.

자바는 객체지향의 추상화를 바로 "class" 키워드를 통해 지원하고 있다!

클래스 멤버 = 정적 멤버 = 스태틱 멤버 (스태틱 영역)
객체 멤버 = 오브젝트 멤버 = 인스턴트 멤버
필드 = 속성 = 프로퍼티
함수 = 메서드

상속

상속은 부모자식으로 이해하면 안된다. 계층도/조직도로 분류하는 것이 아니다.

객체지향에서 "상속"은 재사용과 확장으로 이해하는것이 맞다!

부모-자식 클래스가 아닌 상위-하위클래스 or 슈퍼-서브 클래스라고 표현하자

상속관계의 영어표현은 is a 가 아닌 a kind of 라고 표현하자.

  • 객체 지향의 상속은 상위 클라스의 특성을 재사용/확장 하는 것이다.
  • 객체 지향의 상속은 is a kind of 관계를 만족하는 것이다.

상위 클래스는 물려줄 특성이 풍성할 수록 좋고, -> LSP
인터페이스는 구현을 갖에할 메서드의 개수가 적을수록 좋다. -> ISP

다형성

오버라이딩과 오버로딩 두가지 !

오버라이딩 : 재정의 - 상위클래스의 메서드와 같은 메서드 이름, 같은 인자 리스트
오버로딩 : 중복정의 - 같은 메서드 이름, 다른 인자 리스트

상위클래스 타입의 메서드를 하위 클래스에서 오버라이딩(재정의) 한다면
반드시 하위 클래스 메서드가 실행된다는 사실을 꼭 기억하자 !

제네릭을 이용하면 함수 하나로 다양한 함수를 구현한 효과를 낼 수 있음

오버라이딩도 형변환이나 instanceof연산자를 사용해 하위 클래스가 무엇인지 신경쓰지 않아도 된다.

캡슐화

= 정보은닉

접근제한자에 대한 깊은 이해가 필요해 보인다.
습관적으로 private나 public, 혹인 default를 사용해왔다면 반성이 필요하다.

call by value와 call by reference의 차이를 명확히 알자. -> T메모리
전자는 값 자체로 판단, 후자는 주소(포인터)로 판단

0개의 댓글