객체
-식별자 존재: 객체를 유일하게 구별
-상태 존재: 자료구조에 해당
-메서드 존재: 연산을 수행할 수 있는 행위에 해당
-클래스로 선언 및 사용: 객체들 사이의 공통의 구조와 행위가 클래스로 선언되 사용
클래스
-클래스는 공통되는 것들을 묶어서 대표적인 이름을 붙인것
-클래스가 개념적이라면, 객체는 구체적이다
-데이터뿐 아니라 이 데이터에서 수행되는 메서드까지 포함해 묶은것
구조체
-서로 연관된 자료들만 모아 놓은것
-구성:
-struct: 구조체를 나타내는 예약어
-student: 구조체 태그명
-구조체 멤버
인스턴스
-같은 클래스에 속하는 개개의 객체로, 하나의 클래스에서 생성된 객체
-클래스가 구체화되어, 클래스에서 정의된 속성과 성질을 가진 실제적인 객체로 표현되는 것
-인스턴스화: 추상적인 개념인 클래스에서 실제 객체를 생성하는 것
캡슐화
-사용자들에게 해당 객체의 기능과 사용법만 제공하고 내부는 감추어 쉽게 사용할 수 있는 하는 개념
-객체 내부에 서로 관련된 데이터롸 그 데이터를 조작할 수 있는 메서드를 같이 포장하는 방식으로 그 안에 포함된 메서드만 사용해 데이터 값을 변결할 수 있는 구조
-장점:
-데이터 보호, 추상화 용이, 제공자와 이용자를 명확히 분리, 이용자에게 편리성 제공, 사용법이 쉬움, 변화에 대한 국지적영향, 객체간의 독립성 보장, 변경 용이성과 재사용성 증대
정보 은닉
-외부에서 객체의 내부를 들여다볼 수 없다는개념, 다른 객체가 한 객체 내의 데이터 값을 직접 참조하거나 접근할 수 없다.
-인터페이스와 구현의 명확한 분리: 각 모듈의 내부 항목에 대한 정보는 감추고, 인터페이스를 통해서만 메시지를 전달
-다른 모듈을 변경하지 못한다: 모듈 안의 자료구조와 메서드에 사용된 알고리즘은 외부에서 그 값을 직접 변경못한다. 오직 공개 인터페이스로 정의된 메서드를 통해서만 접근 가능하다.
UML에서 정보은닉의 정도 표기
단계 | C++ | java |
+ | public | public |
# | protected | protected |
~ | X | default |
- | private | private |
특징: 블랙박스역할, 인터페이스를 통한 접근, 자료구조 변경이 용이
정보은닉 개념 사용의 장점: 독립성 향상, 수정 용이, 이해도 증진, 확장성 증가
상속
-상위개념으로 하위개념을 사용한ㄷ.
-장점: 이해용이, 재사용성 증대, 확장 용이, 유지보수 용이. 추상화 가능
다형성
-같은 이름의 메서드가 객체에 따라 다르게 동작하고 서로 다른 구현을 제공한다.
-장점: 쉬운 변경, 확장, 유지보수의 용이
-메서드 오버로딩, 오버라이딩에 대해서 경우에 따라 오버라이딩만 다형성이다라고만 하는 경우도 있다. 그 이유는 다형성의 조건으로 상속계층관게, 동적바인딩을 조건으로 제시하는데 오버로딩은 정적바인딩이기 때문이다. 메시지가 동일해야 하는데 이 메시지가 메서드의 이름까지만 볼것이냐, 파라미터까지 볼것이냐에 따라서도 갈린다. 자바는 메서드의 이름과 메서드의 인자까지 탐색을 한다.
연관 관계(Assocation Relationship)
-두 클래스는 서로 메시지를 주고 받으며 이용하는 관계
-클래스 사이에서 발생, 링크: 객체 사이에서의 이용관계
-아래처럼 화살표가 없으면 상호참조 관계
일반화-특수화 관계
-IS-A관계
-두 클래스 간의 상속 관계
-하위 클래스는 상위 클래스의 각 속성과 메서드를 모두 상속받아 사용 가능
-하위 클래스: 원래 가지고 있던 속성과 연산 + 물려받은 속성과 연산까지 모두 사용 가능
집합 관계(Aggregation Relationship)
-연관 관계를 더 구체적으로 나타내는 것
-거대한 객체 하나를 여러 개의 객체로 구성할 때 발생
-전체와 부분 관계 성립
-집합 관계에 속한 부분 객체는 다른 곳에서도 공유 가능
포함 관계(Composition Relationship)
-전체 객체에 완전히 전속되어 독립된 객체로 존재할 수 없는 부분 객체가 존재하는 관계
-포함 관계의 부분 객체들은 전체 객체가 없어지면 같이 없어짐