목표
JAVA의 심화 내용인 4특징, 5원칙과 각 원칙이 가지는 장점을 설명할 수 있습니다.
내용정리
내가 생각하는 객체 지향이란?
객체 지향 프로그래밍은 소프트웨어를 객체의 모임으로 바라보고, 이들 간의 상호작용을 중심으로 프로그래밍하는 패러다임입니다. 객체 지향의 핵심은 소프트웨어를 현실 세계의 모델로 표현하는 것이며, 이를 통해 유연하고 확장 가능한 코드를 작성하는 것이 목표입니다.
🗨️예를 들어, 아이가 비행기랑 팽이를 가지고 놀 때 그 사이에 장난감이라는 클래스를 만드는게 좋은 것처럼 말입니다.
4특징 5원칙
- 캡슐화: 데이터와 그를 다루는 메서드를 하나로 묶어 외부에서의 접근을 제어하는 것으로, 정보 은닉의 개념을 포함합니다.
- 상속: 부모 클래스의 특성과 메서드를 자식 클래스가 상속받아 재사용하는 것으로, 코드의 재사용성과 확장성을 높입니다.
- 추상화: 복잡한 시스템을 단순화하고 핵심 개념에 집중하기 위해 불필요한 세부 사항을 숨기는 것입니다. 추상화를 통해 프로그래머는 본질에 집중할 수 있습니다.
- 다형성: 다형성은 하나의 인터페이스나 메서드가 여러 형태로 구현되거나 실행될 수 있는 것을 말합니다. 다형성은 상속과 함께 객체 지향의 핵심 개념 중 하나이며, 코드의 유연성을 높입니다.
5원칙
- 단일 책임 원칙 (SRP): 클래스는 단 하나의 변경 이유만을 가져야 하며, 이는 클래스의 변경 사유가 오직 하나여야 함을 의미합니다. 이를 통해 클래스의 응집도를 높이고 코드의 유지보수성을 개선할 수 있습니다.
- 개방-폐쇄 원칙 (OCP): 확장에는 열려있고 변경에는 닫혀 있어야 합니다. 이는 기존의 코드를 변경하지 않고도 새로운 기능을 추가할 수 있어야 함을 의미합니다.
- 리스코프 치환 원칙 (LSP): 하위 타입은 상위 타입을 대체할 수 있어야 합니다. 즉, 상속받은 클래스는 부모 클래스의 역할을 완전히 대체할 수 있어야 함을 의미합니다.
- 인터페이스 분리 원칙 (ISP): 클라이언트는 자신이 사용하지 않는 메서드에 의존하지 않아야 합니다. 따라서 인터페이스는 클라이언트의 요구에 따라 적절하게 분리되어야 합니다.
- 의존 역전 원칙 (DIP): 추상화에 의존하라는 것으로, 상위 수준 모듈은 하위 수준 모듈에 의존하면 안 되며, 둘 다 추상화에 의존해야 합니다.
각 원칙은 객체 지향 프로그래밍에서 유지보수성, 확장성, 재사용성 등을 향상시키기 위해 중요한 지침으로 작용합니다. 이러한 개념들을 잘 이해하고 적용함으로써 효율적이고 견고한 소프트웨어를 개발할 수 있습니다.
예시 코드
ex. 보고서를 편집하고 출력하는 클래스 //내용 편집; 작가. 템플릿(형식) 편집; 디자이너 ...
class ReportSevice {
private ReportDesign reportDesign;
void editContents() {
//내용 편집에 대한 실제 코드를 여기다 적지 말라는 거에요.
}
void editTemplate() {
reportDesign.edit(); ..
}
void print(){
//출력
}
}
위 코드를 보면 작가, 디자이너가 자신의 작업을 수행하기 위해 모두 같은 클래스를 건드리게 됩니다. 하나의 클래스 안에서 변수를 공유할 가능성이 높아져 수정 범위가 200줄처럼 느껴지는 사태가 발생하게 됩니다.
⬇️
class ReportDesign {
void edit() {
여기는 템플릿 편집을 위한 코드가 있습니다
템플릿 편집을 이러쿵 저러쿵... for문 if문 .. .
}
}
editTemplate() 안에 날 것의 코드를 넣지 말고 필드로 선언한 후 필드 안에 있는 edit를 호출하는 것으로 만들면ReportDesign 객체만 수정할 수 있게 되어 다형성을 챙겨 갈 수 있습니다!
회고

"코드도 인간이 작성하는 것이므로 현실세계에서 어떤 주체가 어떠한 행위를 하는지, 어떤 액터에게 부여되는 작업 또는 역할인지를 명확히 할 필요성이 있다는 것을 느꼈습니다. 코드라는 것은 프로그램을 위한 요소인데, 궁극적인 목적은 결국 가능한 한 많은 사람이 제작된 프로그램을 즐겨 찾아야 한다는 것입니다. 이를 실현하려면 코드 역시 모든 사람들이 동의하고 함께 개선해 나갈 수 있는 형태여야겠죠! 객체 지향을 추구하여 이러한 코드를 짤 수 있도록 노력해야겠습니다!"
'BackEnd' 카테고리의 다른 글
미니 프로젝트 회고 (0) | 2024.04.17 |
---|---|
클라우드 기반 백엔드 기초: 애자일과 설계 (0) | 2024.04.15 |
클라우드 기반 백엔드 기초 : 클린코드와 리팩토링 (0) | 2024.04.11 |
클라우드 기반 백엔드 기초 : 추상클래스와 인터페이스, 자바 컬렉션 API (0) | 2024.04.08 |
클라우드 기반 백엔드 기초 : 페어프로그래밍 (0) | 2024.04.05 |
목표
JAVA의 심화 내용인 4특징, 5원칙과 각 원칙이 가지는 장점을 설명할 수 있습니다.
내용정리
내가 생각하는 객체 지향이란?
객체 지향 프로그래밍은 소프트웨어를 객체의 모임으로 바라보고, 이들 간의 상호작용을 중심으로 프로그래밍하는 패러다임입니다. 객체 지향의 핵심은 소프트웨어를 현실 세계의 모델로 표현하는 것이며, 이를 통해 유연하고 확장 가능한 코드를 작성하는 것이 목표입니다.
🗨️예를 들어, 아이가 비행기랑 팽이를 가지고 놀 때 그 사이에 장난감이라는 클래스를 만드는게 좋은 것처럼 말입니다.
4특징 5원칙
- 캡슐화: 데이터와 그를 다루는 메서드를 하나로 묶어 외부에서의 접근을 제어하는 것으로, 정보 은닉의 개념을 포함합니다.
- 상속: 부모 클래스의 특성과 메서드를 자식 클래스가 상속받아 재사용하는 것으로, 코드의 재사용성과 확장성을 높입니다.
- 추상화: 복잡한 시스템을 단순화하고 핵심 개념에 집중하기 위해 불필요한 세부 사항을 숨기는 것입니다. 추상화를 통해 프로그래머는 본질에 집중할 수 있습니다.
- 다형성: 다형성은 하나의 인터페이스나 메서드가 여러 형태로 구현되거나 실행될 수 있는 것을 말합니다. 다형성은 상속과 함께 객체 지향의 핵심 개념 중 하나이며, 코드의 유연성을 높입니다.
5원칙
- 단일 책임 원칙 (SRP): 클래스는 단 하나의 변경 이유만을 가져야 하며, 이는 클래스의 변경 사유가 오직 하나여야 함을 의미합니다. 이를 통해 클래스의 응집도를 높이고 코드의 유지보수성을 개선할 수 있습니다.
- 개방-폐쇄 원칙 (OCP): 확장에는 열려있고 변경에는 닫혀 있어야 합니다. 이는 기존의 코드를 변경하지 않고도 새로운 기능을 추가할 수 있어야 함을 의미합니다.
- 리스코프 치환 원칙 (LSP): 하위 타입은 상위 타입을 대체할 수 있어야 합니다. 즉, 상속받은 클래스는 부모 클래스의 역할을 완전히 대체할 수 있어야 함을 의미합니다.
- 인터페이스 분리 원칙 (ISP): 클라이언트는 자신이 사용하지 않는 메서드에 의존하지 않아야 합니다. 따라서 인터페이스는 클라이언트의 요구에 따라 적절하게 분리되어야 합니다.
- 의존 역전 원칙 (DIP): 추상화에 의존하라는 것으로, 상위 수준 모듈은 하위 수준 모듈에 의존하면 안 되며, 둘 다 추상화에 의존해야 합니다.
각 원칙은 객체 지향 프로그래밍에서 유지보수성, 확장성, 재사용성 등을 향상시키기 위해 중요한 지침으로 작용합니다. 이러한 개념들을 잘 이해하고 적용함으로써 효율적이고 견고한 소프트웨어를 개발할 수 있습니다.
예시 코드
ex. 보고서를 편집하고 출력하는 클래스 //내용 편집; 작가. 템플릿(형식) 편집; 디자이너 ...
class ReportSevice {
private ReportDesign reportDesign;
void editContents() {
//내용 편집에 대한 실제 코드를 여기다 적지 말라는 거에요.
}
void editTemplate() {
reportDesign.edit(); ..
}
void print(){
//출력
}
}
위 코드를 보면 작가, 디자이너가 자신의 작업을 수행하기 위해 모두 같은 클래스를 건드리게 됩니다. 하나의 클래스 안에서 변수를 공유할 가능성이 높아져 수정 범위가 200줄처럼 느껴지는 사태가 발생하게 됩니다.
⬇️
class ReportDesign {
void edit() {
여기는 템플릿 편집을 위한 코드가 있습니다
템플릿 편집을 이러쿵 저러쿵... for문 if문 .. .
}
}
editTemplate() 안에 날 것의 코드를 넣지 말고 필드로 선언한 후 필드 안에 있는 edit를 호출하는 것으로 만들면ReportDesign 객체만 수정할 수 있게 되어 다형성을 챙겨 갈 수 있습니다!
회고

"코드도 인간이 작성하는 것이므로 현실세계에서 어떤 주체가 어떠한 행위를 하는지, 어떤 액터에게 부여되는 작업 또는 역할인지를 명확히 할 필요성이 있다는 것을 느꼈습니다. 코드라는 것은 프로그램을 위한 요소인데, 궁극적인 목적은 결국 가능한 한 많은 사람이 제작된 프로그램을 즐겨 찾아야 한다는 것입니다. 이를 실현하려면 코드 역시 모든 사람들이 동의하고 함께 개선해 나갈 수 있는 형태여야겠죠! 객체 지향을 추구하여 이러한 코드를 짤 수 있도록 노력해야겠습니다!"
'BackEnd' 카테고리의 다른 글
미니 프로젝트 회고 (0) | 2024.04.17 |
---|---|
클라우드 기반 백엔드 기초: 애자일과 설계 (0) | 2024.04.15 |
클라우드 기반 백엔드 기초 : 클린코드와 리팩토링 (0) | 2024.04.11 |
클라우드 기반 백엔드 기초 : 추상클래스와 인터페이스, 자바 컬렉션 API (0) | 2024.04.08 |
클라우드 기반 백엔드 기초 : 페어프로그래밍 (0) | 2024.04.05 |