강의목표 : 설계 패턴을 통해 기존 개발자의 경험 공유. 소프트웨어 개발에 설계패턴 활용 능력 배양. 객체지향 설계 및 구현 능ㄹ력 배양. 리펙토링 개념 이해. 라이브러리 및 코드 이해 및 분석 능력 배양
설계패턴 : 알렉산더가 건축학 분야에서 처음 제시함. 설계패턴은 자료구조, 알고리즘보다도 상위개념
) -->
1장. 객체지향 프로그래밍 개념 재검토
컴퓨터가 어떤 유용한 일을 하기 위해서는 그것을 할 수 있도록 방법을 알려주어야 함.
보다 편리하게 방법을 알려주기 위해 고급프로그래밍 언어를 개발하여 사용하고 있음.
방법이란 보통 절차를 말함. 따라서 초기 프로그래밍 기법은 절차위주였음. 즉, 어떤 함수들을 만들어야 하는지가 초점이였음.
OOP는에서는 주어진 문제를 해결하기 위해 객체로 모델링할 수 있는 것들을 도출하고, 객체들간의 상호작용을 통해 문제를 해결하는 프로그래밍 패러다임.
) -->
객체는 행위,상태,식별자를 가짐
캡슐화 : 데이터와 행위를 하나의 단위로 결합. 관리하기 편한 작은 단위를 얻을 수 있으며 이 단위는 재사용이 가능함. 확장, 변경이 용이하며, 그 파급효과를 지역적으로 제한가능. 접근제어를 통해 외부에서 불필요한 요소에 대한 접근을 방지함. 오류방지.
객체지향프로그래밍에서는 프로그램의 목적을 달성하기 위해 필요한 객체들을 식별하고 이들 간에 어떤 상호작용이 필요한지 설계하는 것이 가능 중요함.
캡슐화 : 데이터의 형태를 숨기고 데이터의 접근을 위한 메소드를 제공하는 과정을 캡슐화라고 한다. 캡슐화는 정해지지 않은 방법으로 데이터가 조작되어 객체가 잘못된 상태로 진입하는 것을 방지해줌.
) -->
클래스는 객체의 모습을 프로그래밍 환경에서 정의하는 틀임.
클래스는 멤버변수와 메소드로 구성됨.
멤버변수는 객체의 상태를 모델링하며, 메소드는 객체의 행위를 모델링함.
인스턴스 : 클래스의 한 객체
자바의 모든 타입은 원시타입 아니면 참조타입임.
private으로 비밀성을 유지할 수 있음
) -->
클래스의 종류
단일 개념을 나타내는 클래스(Point,Rectangle,Ellipse)
Actor : 어떤 작업을 해주는 클래스 (Scanner,StringTokenizer,Random)
유틸리티 클래스 : 객체를 전혀 생성하지 않는 클래스->모든 메소드가 static 메소드임(Math)
프로그램을 시작하기 위해 만든 클래스 : main메소드를 포함하는 클래스
) -->
클래스는 높은 응집성과 낮은 결합성을 가져야함
응집성 : 단일 개념을 나타내야 한다는 것을 말함
결합성 : 다른 클래스와 관계를 말하는 것으로 낮은 결합성이란 서로에게 영향을 주는 것이 적다는 것을 말함
) -->
상속 : 기존 클래스를 이용하여 새 클래스를 정의하는 경우
eg. 긴급주문은 일반 주문 클래스를 상속하여 정의함
상속은 코드의 재사용을 가능하게 해줌
) -->
구체화 : 한 클래스가 특정 인터페이스를 구현한 경우
) -->
사용관계(usa-a) : 한 클래스가 다른 클래스를 사용하는 경우
가장 일반적인 관계
) -->
포함관계(has-a) 한 클래스의 객체가 다른 클래스의 객체를 포함하고 있는 경우
멤버 변수의 타입이 다른 클래스인 경우
연관: 두 클래스의 객체간에 관계가 형성되지만 그것이 부분-전체와 같은 관계가 아님(개인과 구독잡지)
집합 : 부분-전체관계로서 복합이 보다 강한 개념. 복합의 경우에는 전체가 제거되면 부분도 함께 제거되어야 하는 경우이고 집합은 전체가 제거되어도 부분은 남아 있는 경우로 구분됨 (집합 : 연못과 오리)
복합 : 빌딩과 방
) -->
인터페이스는 메소드 이름만 공유하고 상속은 멤버 변수 및 메소드를 공유한다.
인터페이스는 서로 논리적으로 관계가 없는 것들을 그룹핑시켜줌
) -->
상속과 인터페이스의 공통점: 여러타입을 동일 리모콘을 사용하여 사용할 수 있게 해줌.
) -->
인터페이스를 사용하는 이유 : 범용 프로그래밍과 다형성때문. 해당 인터페이스를 리모콘으로 하여 많은 클래스타입의 객체를 전달할 수 있다.
플러그엔플래이 : 코드 수정 없이 호환되는 다른 객체 사용이 가능하다.
) -->
is-a관계:부모와 자식
) -->
상속의 이점 : 코드의 재사용이 가능함. 코드의 확장성이 용이함
부모에 없는 새 메소드를 많이 정의하면 상위 타입을 활용하기 힘들기 때문에 이 경우도 바람직하지 않음
) -->
추상클래스 : 어떤 클래스의 객체를 생성할 필요가 없는 클래스
명백한 초기화는 처음 값이 항상 같은 경우 사용하면 됨
상속은 부모와 자식간에 논리적인 관계(is-a)가 성립할 경우에만 사용되어야 함
형제클래스간에는 메소드 수의 차이는 적어야 좋고, 메소드 내부 내용의 차이만 있을 때 가장 좋음.
상속관계로 모델링하였을 때 가급적이면 상위타입을 통해 처리하는 것이 바람직함. 이것은 코드의 확장성과 수정용이성에 도움이 됨.
) -->
'컴퓨터 공학' 카테고리의 다른 글
객체지향개발론_3장.전략패턴 (0) | 2015.11.27 |
---|---|
2장. 객체지향 개발 절차와 UML (0) | 2015.11.27 |
정보보호개론 2장. 암호프로토콜의 개요 (0) | 2015.11.27 |
정보보호개론 (0) | 2015.11.27 |
컴파일러 1장 (0) | 2015.11.27 |