프린이 입니다. 빨간 부분은 내용에 대해 제가 찾아보고 이해한 것인데 이에 대해 맞는 내용인지 답변 좀 부탁드립니다.
객체는 상태 및 동작의 소프트웨어 번들.
객채에는 상태와 동작이 존재하는데, 상태는 필드에 저장하며 메서드를 통해서 외부와 모든 상호작용을 수행함.
이때 내부 데이터를 은닉할 수 있는데 이것이 데이터 캡슐화.
메서드는 필드에 저장된 상태를 지정하고 변경할 수 있음.
객체 번들화의 이점은?
1. 모듈성 - 독립적으로 작성이 가능해 유지 관리가 쉬워 시스템 내부에 쉽게 전달이 가능.
2. 정보 은닉 - 내부 구현 정보를 숨긴채 메서드와만 상호작용을 함.
-1) Q. 그래서 정보 은닉의 이점은?
클라이언트가 내부 정보를 엑세스 할 수 없게 되어 인터페이스 내에서만 작업을 수행.
이렇게 된다면 굳이 내부 클라이언트를 수정할 필요 없이 간단히 클라이언트의 정보를 수정할 수 있음.
그렇게 되면 당연히 오류 발생도 줄일 수 있을 것 같음.
3. 코드 재사용 - 객체가 이미 존재 시 해당 객체를 사용 할 수 있어 복잡한 작업(구현/테스트/디버깅)이 가능해짐.
4. 연결 가능성 및 디버깅 용이성 : 특정 객채에 문제가 발생할 경우 그 객체만 수정, 제거, 대체가 가능.
-2) Q.데이터 캡슐화와 정보은닉(information-hiding)은 같은 것인가?
정보 은닉은 메서드가 어떻게 구현되는지 알 필요 없이 간단히 사용 가능하다는 점이고
데이터 캡슐화는 간단한 인터페이스로 구현하기 위해 사용하기 쉬운 방식으로 소프트웨어를 번들화 하는 것.
즉 두 개념은 다른 것으로 보임. 그러나 둘다 클래스를 사용하기 쉽게 하는 것이 목표라는 점에서 밀접한 연관이 있음.
-3) Q. 정보 은닉이 더 작은 단위(메서드), 데이터 캡슐화는 비교적 큰 단위(소프트웨어)로 보이는데 이게 맞는지
+클래스를 사용하기 쉽게 하는 것이 목표라고 하는데 이 뜻이 결국 메서드와 소프트웨어를 이해하기 쉽게 번들화하니
프로그래머가 프로그래밍을 할 때 클래스를 쓰는 것이 더 쉬워진다는 뜻으로 받아들이면 되는지.
-1) Q. 그래서 정보 은닉의 이점은? 추가 설명을 해보자면, 정보를 안다는건 엮인다는거야 엮인다는건 수정될때 함께 수정돼야한다는거고 모를 수 있는건 몰라야만 하는거고 정보 은닉은 그걸 도와주는 장치야 정보가 노출돼있으면 자꾸 그걸 사용하게 되거든
-2) Q.데이터 캡슐화와 정보은닉(information-hiding)은 같은 것인가? 캡슐화는 정보 은닉의 실천 수단 중 하나에 불과해 필드랑 메서드를 은닉하는게 캡슐화임
-3) Q. 정보 은닉이 더 작은 단위(메서드), 데이터 캡슐화는 비교적 큰 단위(소프트웨어)로 보이는데 이게 맞는지 음.. 이건 질문이 좀 이상한데? 아예 잘못된 이야기야
-1) 엮인다는 것이 결국 외부 클라이언트가 인터페이스에서 수정을 하면 알아서 내부 클라이언트(소스코드)가 수정된다는 것인가요? 모를 수 있는건 몰라야만 한다는게 보안과 관련된 것을 의미하는건가요? 아니면 불필요한 정보를 모르게 한다는건가요? -2) 정보은닉이 상위개념이라는 말씀이신거죠? 그 중 필드랑 메서드를 은닉하는 것이 캡슐화라는 것이고 -3) 위처럼 이해하면 3번은 바보 같은 질문이 되겠네요
-1) 엮인다는 것이 결국 외부 클라이언트가 인터페이스에서 수정을 하면 알아서 내부 클라이언트(소스코드)가 수정된다는 것인가요?모를 수 있는건 몰라야만 한다는게 보안과 관련된 것을 의미하는건가요? 아니면 불필요한 정보를 모르게 한다는건가요?보안적인 장점도 있는건 맞는데, 내가 말한건 보안과 관련된 내용은 아니야엮인다는건 사용한다는거야예를 들어 제빙기가 있어. 우리는 제빙기를 물넣기, 얼음생성하기 두개 기능만 사용하는게 이상적이야그런데 제빙기의 모든 정보가 오픈돼있어서 얼음을 생성하는 방식과 보관하는 방식을 외부에서 가져다 써버린거야혹은 외부에서 생성하는 방식과 보관하는 방식을 고려해서 환경을 조성해버린거야근데 제빙기는 얼음을 생성하는 방식과 보관하는 방식을 변경할수도 있는거거든?근데 정보가
근데 제빙기는 얼음을 생성하는 방식과 보관하는 방식을 변경할수도 있는거거든? 근데 정보가 은닉되지 않아서 이 방식을 변경할 수 없게 돼버렸어 변경할거면 외부도 함께 변경돼야하는거지
이렇게 되면 외부와 제빙기의 차이가 없어진거라고 볼 수 있지 이는 높은 결합도고 높은 결합도는 객체지향 원칙에 위배되는거
빡대가리라 이해하는게 어렵네요ㅠㅋㅋ 제빙기가 물넣기+얼음생성하기 두 객체만 사용하는게 이상적인데 외부에선 정보가 은닉되지 않아서(몰라야 하는것 : 보관방식), 생성방식에다 보관방식까지 써버리는 바람에(혹은 환경을 조성하는 바람에) 얼음 생성하는 방식과 보관하는 방식을 변경하기 힘들게 된다. (외부도 변경이 되어야하는데 조성해버린 환경들이 서로 영향을 받아서 변경하기 힘든?) 이런게 결국 결합도가 높다고 할 수 있는 것? 이는 객체지향에 위배되는 부분이라고 이해하면 될까요..
그렇게 이해하면 돼
데이터 캡슐화로 예를 들면 메서드나 필드에 존재하는 데이터를 은닉하지 않아서 모르고 외부에서 내부 데이터들을 막 서로 영향이 가게끔 사용해버린 바람에 내부에서 메서드나 필드를 수정해도 외부에서는 내가 원하는 방향으로 결과가 안나오는?
그렇지
와 진짜 감사합니다 오늘 자바 첫날인데 객체지향에 감이 잡히네요 고맙습니다ㅠㅠ!!!
똘똘하네
아닙니다 명강사이십니다 진짜
어 지금 봤는데 "제빙기가 물넣기+얼음생성하기 두 객체만" 이게 아니고 두 객체가 아니고 두 메소드만 이라고 해야지
넹 고맙슴다
-2) 정보은닉이 상위개념이라는 말씀이신거죠? 그 중 필드랑 메서드를 은닉하는 것이 캡슐화라는 것이고 그렇지
-3) 위처럼 이해하면 3번은 바보 같은 질문이 되겠네요 바로 이해한걸 보니 바보가 아니네