● 객체 지향 프로그래밍의 특징
- 추상화
- 캡슐화
- 정보은닉
- 다형성
- 상속
● 객체 지향 설계 (SOLID) 원칙
- 단일 책임 원칙 (SRP : Single Responsibility Principle) : 한 클래스는 하나의 책임만 가져야 한다.
- 개방/폐쇄 원칙 (OCP : Open/Closed Principle) : 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
- 리스코프 치환 원칙 (LSP : Liskov Substitution Principle) : 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
- 인터페이스 분리 원칙 (ISP : Interface Segregation Principle) : 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나 보다 낫다.
- 의존관계 역전 원칙 (DIP : Dependency Inversion Principle): 프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다.
★ 소프트웨어 위기(Software Crisis)
- 컴퓨터의 발달 과정에서 소프트웨어 개발 속도가 하드웨어 개발 속도를 따라가지 못해 사용자 요구사항을 감당할 수 없는 문제가 발생한 것을 소프트웨어 위기라고 말한다.
● 클래스
• 구조적(절차적) 프로그래밍의 장점과 단점은?
- 코드가 추가되면 System이 불안해진다.
- 구조적 프로그래밍에서 코드는 개발자의 기준에 따라 아무데나 들어 갈 수 있다.
= 즉 어느 곳이든 불안해 질 수 있다.
* (데이터 + 기능 = Object) → Language에서 Data Type으로 구현했지만 이 개념을 처음 만든 곳이 C++ 이고, 이러한 Object를 Class라고 불렀기 때문에 Class라는 단어가 쓰이게 되었다.
• 자료형
- 기본적으로 메모리에 올라간다.
● 생성자 (Constructor)
- 클래스를 메모리에 적재 할 때 이를 초기화하기 위한 특별한 메소드
- 생성자는 클래스와 이름이 같다.
- 리턴형이 없다.
- 명시적으로 작성을 하지 않을 경우 자바 컴파일러가 기본 생성자 추가.
- 오버로딩(Overloading)하여 사용
- 오버로딩된 생성자만 있는 경우 기본 생성자를 넣지 않음. (기본 생성자는 반드시 작성할 것)
※ 디폴트 생성자를 자바가 넣어주는 기준은 생성자가 없는 경우이다. 그러므로 오버로딩된 생성자가 존재하는 경우
디폴트 생성자를 만들어주지 않아서 에러가 발생하게 된다.
★ 즉, 디폴트 생성자는 class를 만들 때 반드시 만들어줘야 한다.
● 정보 은닉 (Information Hiding)
- 클래스의 요소를 숨기거나 공개하는 기법
만약 총점과 평균을 구하는 프로그램을 짠 경우.
총점을 공개하게 되면 이 프로그램은 총점과 평균을 같이 알려주게 되므로 프로그램의 기능이 늘어나게 된다.
• 정보 은닉의 필요성
- 보안성 : 노출시키면 안되는 요소의 보호
- 사용성 : 블랙박스 개념
- 확장성 : 클래스의 확장 시 정보은닉을 기반으로 확장
* 상속받을 때 너무 많은 기능을 확장하려 하면 오히려 코드의 퀄리티가 떨어진다.
기능을 많이 개방하면 좋은 것 같지만, 실제로는 그만큼 사용성이 떨어진다는 뜻이다.
'Java Programming' 카테고리의 다른 글
연결 리스트 (Linked List) (0) | 2022.03.27 |
---|---|
참조형 (Reference) (0) | 2022.03.27 |
메소드 (Method) (0) | 2022.03.27 |