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