728x90
1. 서론
2. 절차지햔 VS 객체지햔
3. 객체
4. 캡슐화
1. 서론
# 소프트웨어를 유지보수하는 이유
- 변화하는 세계에서 여전히 유용한 소프트웨어가 되도록 하기 위함이다.
- ==> 바뀌어가는 환경에 알맞게 소프트웨어 또한 변경되어야 한다.
??? 낮은 비용으로 소프트웨어를 변화시키기 위한 방법에는 어떤 것이 있을까?
- 객체지향 프로그래밍 = 캡슐화 + 다형성(추상화)
2. 절차 지향 vs 객체 지향
# 절차지향
- 절차 지향의 장점
- 코드 구현 시 작성하기 쉽고 시간이 적게 소요됨
- 절차 지향의 단점
- 대개 위에서 선언한 data 값을 아래에서 공유하는 방식을 사용
- 코드의 중복 사용 및 데이터 공유의 현상이 발생
- 코드 수정의 어려움을 야기
- => 비용적으로 좋지 않음.
- 대개 위에서 선언한 data 값을 아래에서 공유하는 방식을 사용
# 객체지향
- 객체지향의 특징
- 데이터와 프로시저를 객체라는 단위로 묶는다.
- 특정 객체가 갖고 있는 데이터는 해당 객체의 프로시저만 접근할 수 있도록 설계한다.
- == 다른 객체는 접근할 수 없음.
- 객체와 객체는 서로 데이터를 주고 받지는 않음
- 그들은 서로의 프로시저를 호출하는 방식을 통해 서로 연결
3. 객체
# 그래서 객체가 뭐야?
- 하나의 기능을 수행하고 있는 한 묶음
- 객체는 기능 제공을 기준으로 정의된다.
- 그 객체가 어떤 기능을 제공하느냐!!!!
# 기능 명세
- 메소드(operation) 이용
- 이름, 파라미터, 결과로 구성
# 그럼 위에서 말한 객체와 객체 사이에서 기능을 사용하여 연결을 하는 방법은 멀까?
- 기능 사용 == 메소드 호출
- 메세지
- 객체와 객체가 상호작용 한다 == 메세지를 주고 받는다
+) 필드 data에 대한 get, set 메소드만 있는 경우의 클래스는 data class라고 많이 표현
- C언어의 구조체 같은 바이브...
- 그 외의 어떠한 기능도 하지 않는 경우
4. 캡슐화
# 캡슐화란?
- 데이터와 해당 데이터와 관련된 기능을 묶는 것.
- 기능의 구현및 구현에 사용된 데이터의 상세 내용을 외부로부터 감춤
- ex) data가 어떤 타입인지 어떤 값을 사용하는지 등
- 정보 은닉(Information Hiding)의 의미 포함
# 그래서 이걸 왜 해?
- 외부의 영향 없이 객체 내부의 구현을 변경할 수 있다!
- 기능을 사용하는 코드에 영향을 주지 않거나 최소화 하며 내부 구현을 변경할 수 있는 유연함이 생김
- 수정에 드는 비용을 낮출 수 있는 경우가 높아짐
# 캡슐화 유뮤 상황 비교
- 상황 : 요구사항이 변경되어 데이터구조 및 사용에 변화가 발생하였을 경우
- 캡슐화 X
- 해당 데이터를 사용하는 무수히 많은 코드를 일일히 수정하여 작업을 진행해야 함
- ==> 데이터를 공유하는 절차 지향 방식의 단점.
- 캡슐화 O
- 변경하고자 하는 기능의 메소드만 변경하면 됨
- 해당 메소드를 호출함으로써 사용하는 다른 코드들은 변경되지 않음
# 캡슐화의 장점
- 캡슐화 진행시 요구사항 변경 발생 시 연쇄적으로변경이 전파되는 것을 최소화 할 수 있음.
- 기능에 대한 이해도를 높일 수 있음 : 코드의 의도를 파악하게 됨.
- 메소드를 구현한 목적에 대하여 생각 할 수 있음
# 캡슐화 의 두가지 원칙
1. Tell, don't Ask
- 데이터를 달라고 하지 말고
- 그 데이터를 가지고 있는 객체의 메소드를 호출하여 그 친구를 어떻게 하게 해줘! 를 요구
2. Demeter's Law 데미테르의 법칙
- 메서드에서 생성한 객체의 메소드만 호출
- 파라미터로 받은 객체의 메소드만 호출
- 필드로 참조하느 객체의 메소드만 호출.
- 메소드 하나만 호출할 수 있도록 변경해라
- 얘를 하다보면 기능의 캡슐화가 진행 될 가능성 有
- ex) 객체.메소드().메소드() 와 같이 연속적으로 진행하는 경우가 아닌 객체.method()와 같이 특정 메소드 하나로 호출할 수 있게끔 해야함
728x90
'🦁 걸어봐 위엄 라잌어 라이옹 > 👀 주차별 과제' 카테고리의 다른 글
[대학교멋사🦁/OOD] 3. 상속 보다 조립 (0) | 2023.05.04 |
---|---|
[대학교멋사🦁/OOD] 2. 다형성 추상화 (0) | 2023.05.04 |
[대학교멋사🦁/JAVA] Assignment_2회차_3 (1) | 2023.04.28 |
[대학교멋사🦁/JAVA] Assignment_2회차_2 (0) | 2023.04.28 |
[대학교멋사🦁/JAVA] Assignment_2회차_1 (0) | 2023.04.28 |