2021년 05월 30일 JAVA 스터디 과제

2hyeon2gyun·2021년 5월 29일
0

2021년 05월 22일부터 JAVA 스터디를 시작하였다 오늘은 첫 과제
JAVA 공부를 하면서 4대 특성, 5대 원칙 이야기는 많이 들었지만 정확히는 알지 못했습니다.
그리고 과제를 스터디 하루전에 하는것에 많은 죄책감을 느끼고 있습니다.

객체지향의 4대 특성

객체지향의 4대 특성은 캡슐화 상속
추상화 다형성이 있다.

캡슐화

캡슐이 무엇일까?

캡슐의 어원은 "작은 상자"라는 의미로, 가루나 액체, 그 외 기타 등등 내용물을 고체를 이용해 포장한 형태를 말한다. -- 나무위키 --

자바의 캡슐화에 이 의미를 접목 시키자면 비슷한 속성과 메소드를 하나의 클래스로 묶은것이다 이러한 특성의 장점은 은닉화이다. 우리가 어린 시절 문방구 앞에서 많이 해보았던 뽑기를 를 들어 보겠다 뽑기 안에 캡슐에 뽑는 사람이 무언가를 넣거나 뺄 수 없다. 자바의 캡슐화는 위에 들은 예 처럼 외부에서 클래스를 마음대로 접근하지 못한다. 접근 할 수 있는 방법은 public 메소드를 통한 방법뿐이다. 즉 객체의 오용과 오염을 방지할 수 있다.

그럼 접근을 제어하는 접근 제한자도 알아보겠다.

public > 모든 접근을 허용
protected > 같은 패키지에 있는 객체와 상송관예의 객체들만 허용
default > 같은 패키지에 있는 객체들만 허용
private > 현재 객체에서만 허용

상속성

상속이란 부모의 클래스의 메소드와 필드를 자식 클래스에서 그대로 물려 받는것을 의미한다. 우리의 현실 세계의 상속과 매우 유사하다 부모가 자식에게 유산을 증여하듯이 자식 클래스가 부모 클래스가 가지고 있는 자산을 그대로 증여받는 것이다. 예를 들어 동물에는 개, 고양이, 닭이 있다 이때 개, 고양이, 닭이 동물에 속하는 것이지 동물이 개, 고양이, 닭에 속하지는 않는다.
EX) 모든 동물은 개이다? X 아버지의 나? X
상속의 장점으로는
클래스를 확장하며 재사용하기에 좋다는 점이 있다.

추상화

자동차를 이용할 때 사용자는 기어를 움직여서 후진과 전진을 한다는 것만 알면 된다. 기어를 조작할 때 자동차에 많은 작업이 이루어지지만 사용자는 기어에 관한 모든 내용을 알 필요는 없다. 추상화는 사용자들에게 작동되는 세부 사항은 감추고 기능만을 제공하려는 목적이다. 사용자가 개체가 무엇을 하는지는 알 수 있지만 어떻게 하는지는 알 수 없다는 의미이다.

추상 클래스의 용도로는 설계와 구현을 분리하는 데에도 있다. 이를 책으로 비유하면, 추상 클래스는 책의 목차로, 이를 상속받은 서브 클래스는 목차에 따라 작성된 책으로 볼 수 있다. 동일한 목차를 여러 개발자들에게 주어 목차에 따라 컨텐츠를 채워 달라고 요청했을 때, 서로 다른 내용이 담긴 책들이 완성될 것이다.

다형성

다형성을 설명하지 이전에 예를 들어 보겠다. 우리는 바지를 입을 떄 몸의 사이즈가 변하거나 기온에 따라 해당 옷을 수선하게 된다. 그리고 길이에 따라 7부, 8부, 9부, 반바지가 된다. 이 처럼 다형성은 같은 모양의 함수가 상황에 따라 다르게 동작하는것을 의미한다. 오버로딩, 오버라이딩, 업캐스팅의 3가지가 있다.

오버라이딩은 부모 클래스의 메소드를 자식 클래스에서 똑같은 모양으로 재정의 하는것이다. 같은 모양의 함수가 어느 클래스에 속해있냐에 따라 다른 일은 하게 되므로 다형성의 한 예가 될 수 있다.

오버로딩은 같은 이름의 함수를 매개변수, 개수, 타입에 따라서 다르게 사용하는 것이다. 같은 이름의 함수가 매개변수에 따라서 다른 일을 하게 되므로 다형성의 예가 될 수 있다.

업캐스팅
부모 클래스형 포인터로 자식 클래스응 가리키는 경우 같은 자식 클래스를 어
떤 자료형으로 가리키냐에 따라서 호출할 수 있는 메소드가 달라진다. 같은 객체를 어떤 자료형으로 가리키냐에 따라서 호출되는 메소드가 달라지게 되므로 다형성의 한 예가 될 수 있다.

객체지향의 5대 원칙

객체지향의 5대원칙은 SRP(단일 책임 원칙), OCP(개방 폐쇄 원칙), LSP(리스코프 치환 원칙), ISP(인터페이스 분리 원칙), DIP(의존 역전 원칙)이 있다 줄여서 SOLID 원칙이라고 부른다.

단일 책임 원칙(Single responsibility priciple, SRP)

모든 클래스는 각각 하나의 책임만 가져야 한다. 클래스는 그 책임을 온전히 캡슐화해야 함을 말한다.
은행 시스템의 프로그램의 출금 기능 클래스가 있다고 가정하자 하지만 이 클래스에 입금 기능도 같이 넣어두게 된다면 출금 기능이 문제가 있을 때 코드를 수정을 해야할 때 입금 기능이 문제가 되는지 출금 기능이 문제가 있는지 확인하기 불편하고 어려울 것이다.

개방 폐쇄 원칙(Open/Closed Principle, OCP)

클래스, 모듈 함수등의소프트웨어 개체는 확장에 대해 열려있어야 하고, 수정에 대해서는 닫혀 있어야 한다는 원칙이다. 이는 수정을 하더라도 기존 구성요소에서는 수정이 일어나지 않아야 하며, 쉽게 확장이 가능하여 재사용을 할 수 있도록 해야한다는 의미이다.

리스코프 치환 원칙(Liskov Substitutions Principle, LSP)

자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있다는 원칙이다. 즉 부모 클래스가 들어갈 자리에 자식 클래스를 넣어도 잘 동작해야 한다

인터페이스 분리 원칙 (Interface Segregation Principle)

한 클랫는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다. 하나의 일반적인 인터페이스보다 여러개의 구체적인 인터페이스가 낫다.

의존 역전 원칙 (Dependency Inversion Principle)

의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것 보다는 변화하기 어려운 것 거의 변화가 없는 것에 의존하하는 것이다. 한마디로 구체적인 클래스보다 인터페이스나 추상 클래스와 관계를 맺으라느 것이다.

profile
오늘보다 내일

0개의 댓글