%20(%E1%84%91%E1%85%A1%E1%84%85%E1%85%A1%E1%86%AB).png)
public : 접근 제한이 없음private : 자기 자신의 클래스 내에서만 접근 가능protected : 동일한 패키지 내에 존재하거나, 파생 클래스에서만 접근 가능default : 접근 제어자를 명시하지 않을 경우 접근 제어의 기본 값으로 붙고, 동일한 패키지 내
%20(%E1%84%91%E1%85%A1%E1%84%85%E1%85%A1%E1%86%AB).png)
하나 이상의 추상 메소드를 포함하는 클래스객체 지향 프로그래밍에서 중요한 특징인 '다형성'을 가지는 메소드의 집합을 정의할 수 있도록 해줌 (즉, 반드시 사용되어야 하는 메소드를 추상 클래스에 추상 메소드로 선언해 놓으면, 이 클래스를 상속받는 모든 클래스에서는 이 추
%20(%E1%84%91%E1%85%A1%E1%84%85%E1%85%A1%E1%86%AB).png)
자바에서는 클래스를 통한 다중 상속은 지원하지 않고 인터페이스를 통해 다중 상속을 지원 → 다중 상속의 모호성 해결추상 클래스는 추상 메소드뿐만 아니라 생성자, 필드, 일반 메소드도 포함할 수 있지만 인터페이스(interface)는 오로지 추상 메소드와 상수만을 포
%20(%E1%84%91%E1%85%A1%E1%84%85%E1%85%A1%E1%86%AB).png)
기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것기존에 작성된 클래스 재활용 가능자식 클래스 설계 시 중복되는 멤버를 미리 부모 클래스에 작성해 놓으면, 자식 클래스에서는 해당 멤버를 작성하지 않아도 됨.클래스 간의 계층적 관계를 구성함으로써 다
%20(%E1%84%91%E1%85%A1%E1%84%85%E1%85%A1%E1%86%AB).png)
상속받은 부모 클래스의 메소드를 재정의하여 사용하는 것
%20(%E1%84%91%E1%85%A1%E1%84%85%E1%85%A1%E1%86%AB).png)
첫 릴리즈로부터 릴리즈를 계속할수록 코드 한 줄 당 비용이 높아짐.실제 코드 줄 수는 큰 폭으로 증가하지 않지만 한 줄 당 비용이 증가함.주요 원인 : 코드 분석 시간 증가와 코드 변경 시간 증가소프트웨어의 가치 : 변화"keep being useful in a cha
%20(%E1%84%91%E1%85%A1%E1%84%85%E1%85%A1%E1%86%AB).png)
절차 지향 : 데이터를 여러 프로시저가 공유하는 방식객체 지향 : 데이터와 프로시저를 객체라는 단위로 묶고 데이터에 직접 접근을 할 수 없고 프로시저를 이용해 데이터에 접근하는 방식https://s3-us-west-2.amazonaws.com/secure.no
%20(%E1%84%91%E1%85%A1%E1%84%85%E1%85%A1%E1%86%AB).png)
데이터 + 관련 기능 묶기객체가 기능을 어떻게 구현했는지 외부에 감추는 것(구현에 사용된 데이터의 상세 내용을 외부에 감춤)정보 은닉(Information Hiding) 의미 포함캡슐화를 통해 기능을 사용하는 코드에 영향을 주지 않고 (또는 최소화) 내부 구현을 변경할
%20(%E1%84%91%E1%85%A1%E1%84%85%E1%85%A1%E1%86%AB).png)
여러(poly) 모습(morph)을 갖는 것객체 지향에서는 한 객체가 여러 타입을 갖는 것한 객체가 여러 타입의 기능을 제공타입 상속으로 다형성 구현 - 하위 타입은 상위 타입도 됨데이터나 프로세스 등을 의미가 비슷한 개념이나 의미 있는 표현으로 정의하는 과정두 가지
%20(%E1%84%91%E1%85%A1%E1%84%85%E1%85%A1%E1%86%AB).png)
추상화를 하지 않는다면?요구 사항의 변경이 있을 시 코드 구조가 복잡해지고 관련 코드가 여러 곳에 분배됨으로 코드의 가독성과 분석 속도가 저하된다.
%20(%E1%84%91%E1%85%A1%E1%84%85%E1%85%A1%E1%86%AB).png)
상속은 상위 클래스의 기능을 재사용, 확장하는 방법으로 활용하나..→ 상속을 통한 기능 재사용 시 단점 발생상위 클래스 변경이 어려움 상위 클래스 변경의 여파가 계층도에 따라 하위 클래스로 영향을 줌으로 잘못 변경 시 하위 클래스들이 모두 비정상적으로 작동할 수
%20(%E1%84%91%E1%85%A1%E1%84%85%E1%85%A1%E1%86%AB).png)
하나의 기능은 여러 하위 기능 이용해서 구현분리한 하위 기능을 누가 제공할지 결정하는 것 → 객체 지향 설계의 기본 과정기능을 분리하고 각 객체에게 분리한 기능을 제공할 책임을 배분하는 것 (기능은 곧 책임)클래스나 메서드가 커지지 않도록 책임을 분배/분리하는 방법패턴
%20(%E1%84%91%E1%85%A1%E1%84%85%E1%85%A1%E1%86%AB).png)
기능 구현을 위해 다른 구성 요소를 사용하는 것의존의 예: 객체 생성, 메서드 호출, 데이터 사용의존은 변경이 전파될 가능성을 의미의존하는 대상이 바뀌면 바뀔 가능성이 높아짐예: 호출하는 메서드의 파라미터가 변경예: 호출하는 메서드가 발생할 수 있는 익셉션 타입이 추가
%20(%E1%84%91%E1%85%A1%E1%84%85%E1%85%A1%E1%86%AB).png)
의존 역전 원칙고수준 모듈은 저수준 모듈의 구현에 의존하면 안 됨저수준 모듈이 고수준 모듈에서 정의한 추상타입에 의존해야 함DIP는 유연함을 높임고수준 모듈의 변경을 최소화하면서 저수준 모듈의 변경 유연함을 높임부단한 추상화 노력 필요처음부터 바로 좋은 설계가 나오지는