객체지향

김예지·2023년 7월 23일
1

객체의 핵심 -> 기능 제공
객체는 제공하는 기능으로 정의
-내부적으로 가진 필드(데이터)로 정의하지 않음
예 회원 객체 -> 암호 변경하기기능, 차단 여부 확인 하기 기능

메서드를 이용해서 기능 명세 ( 이름, 파라미터, 결과 )
객체와 객체는 기능을 사용해서 연결 ( 상호 작용 )
기능 사용 = 메서드 호출

객체와 객체 상호 작용 : 메시지를 주고 받는다고 표현
-메서드를 호출하는 메시지, 리턴하는 메시지, 익셉션 메시지

기능이 없고 단순한 데이터만 다루는 클래스는 객체보다는 데이터에 더 가깝다 (구조체-c)

전체적으로 이해했을 때 기능을 사용하는 곳과 기능을 작성하는 곳을 정확하게 분리하여 수정을 최소화 하는 과정

캡슐화

데이터 + 관련 기능 묶기
객체가 기능을 어떻게 구현했는지는 외부에 감추는 것
구현에 사용된 데이터의 상세 내용을 외부에 감춤
정보은닉 의미 포함
외부에 영향 없이 객체 내부 구현 변경 가능
요구사항이 변경이 될 때 코드 수정을 최소하 할 수 있음

규칙

  • 데이터 달라 하지 말고 해달라고 하기
  • 메서드에서 생성한 객체의 메서드만 호출
  • 파라미터로 받은 객체의 메서드만 호출
  • 필드로 참조하는 객체의 메서드만 호출

정리
-> 기능의 구현을 외부에 감춤
-> 캡슐화를 통해 기능을 사용하는 코드에 영향을 주지 않고 (또는 최소화) 내부 구현을 변경할 수 있는 유연함

추상화

여러 모습을 갖는 것
객체지향에서는 한 객체가 여러 타입을 갖는 것
즉 한 객체가 여러 타입의 기능을 제공
타입 상속으로 다형성 구현
하위 타입은 상위 타입도 됨

추상화 -> 제이터나 프로세스 등을 의미가 비슷한 개념이나 의미 있는 표현으로 정의하는 과정

두 가지 방식의 추상화
특정한 성질 , 공통 성질 (일반화)

타입 추상화
여러 구현 클래스를 대표하는 상위 타입 도출
흔히 인터페이스 타입으로 추상화
추상화 타입과 구현은 타입 상속으로 연결

-> 추상 타입은 구현을 감춤

추상화는 변경이나 확장시에 시도하는 것이 좋다

상속을 통한 기능 재사용의 단점

  • 상위 클래스 변경이 어려움
  • 상속 오용

단점 해결 방법
-> 조립
여러 객체를 묶어서 더 복잡한 기능을 제공
보통 필드로 다른 객체를 탐조하는 방식으로 조립 또는 객체를 필요 시점에 생성/구함

기능은 곧 책임
분라한 각 기능을 알맞게 분배

  • 패턴 적용
  • 계산분리
  • 연동분리
  • 조건 분기는 추상화

의존
기능 구현을 위해 다른 구성 요소를 사용하는 것
의존의 예 : 객체 생성, 메소드호출, 데이터 사용

의존은 변경이 전파될 가능성을 의미
의존하는 대상이 바뀌면 바뀔 가능성이 높아짐
예 : 호출하는 메서드의 파라미터가 변경
예 : 호출하는 메소드가 발생할 수 있는 익셉션 타입이 추가

순환의존 (위험)
변경 연쇄 전파 가능성

profile
나만의 방식을 찾아가는 신입신입 개발자

1개의 댓글

comment-user-thumbnail
2023년 7월 23일

잘 봤습니다. 좋은 글 감사합니다.

답글 달기

관련 채용 정보