Loading the catalog…
Loading the catalog…
인프런 김영한 강사님의 스프링 핵심 원리 - 기본편의 섹션 2를 정리한 내용입니다. 객체 지향 프로그래밍이란? 컴퓨터 프로그램을 " 객체 "들의 모임으로 파악하고자 하는 것 각자의 " 객체 "는 메시지를 주고받고 데이터 처리가 가능 프로그램을 유연 하고 변경이 용이 하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용 유연하고 변경이 용이하다? 레고 블럭 조립하듯이, 부품을 갈아 끼우듯이 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법 유연함과 변경이 용이하게 만드는 객체지향의 핵심은 바로 다형성 이다. 다형성이란? 실세계로 비유하자면, 운전자 - 자동차 예시 자동차가 바뀌어도 운전자에게는 영향을 주지 않음 왜? 자동차 라는 역할의 인터페이스는 바뀌지 않으니까. '운전자'가 자동차의 내부 구조를 몰라도, 내부 구조가 바뀌어도, '자동차'라는 역할의 인터페이스가 변하지 않았기 때문에 운전이 가능한 것 처럼 '클라이언트'도 대상 역할의 인터페이스가 변하지 않는다면 새로운 기능을 제공하여도 아무 문제가 없을 것이다. 핵심은 클라이언트이다. 클라이언트는 대상의 역할(인터페이스)만 알면 된다. 클라이언트는 구현 대상의 내부 구조를 몰라도 된다. 클라이언트는 구현 대상의 내부 구조가 변경 되어도 영향을 받지 않는다. 클라이언트는 구현 대상 자체를 변경 해도 영향을 받지 않는다. 즉, 구현보다 대상의 역할(인터페이스)이 더 중요하다. 역할(인터페이스)이 변하면 클라이언트, 서버 모두에 큰 변경이 발생하기 때문에 인터페이스를 안정적으로 잘 설계하는 것이 중요하다는 것이다. Spring과 객체 지향은 어떤 연관성일까? Spring은 IoC, DI 기능에서 다형성을 활용하여 이용할 수 있도록 지원한다. 또한, Spring과 객체 지향 설계를 제대로 이해하려면 다형성이 아닌 SOLID 라는 원칙을 알아야 한다. SOLID 원칙은 또 뭔데? SOLID란, 좋은 객체 지향 설계의 5가지 원칙을 정리한 것이다. SRP (Single Responsibility Principle) OCP (Open/Closed Principle) LSP (Liskov Substitution Principle) ISP (Interface Segregation Principle) DIP (Dependency Inversion Principle) SRP: 단일 책임 원칙 한 클래스 는 하나의 책임 만 가져야 한다. 하나의 책임이라는 것은 크고 작을 수 있고, 문맥과 상황에 따라 다르기에 모호한 표현. 중요한 기준은 변경 이다. 변경이 있을때 그에 따른 파급 효과가 적으면 SRP 를 잘 따른 것 OCP: 개방-폐쇄 원칙 소프트웨어 요소는 확장에는 열려 있으나, 변경에는 닫혀 있어야 한다. 이 원칙의 문제점이 있다. 구현 객체를 변경하려면 클라이언트 코드를 변경해야 한다. 위 자동차 예시를 들자면, 운전자에게 자동차를 아반떼 에서 소나타로 변경한다고 알려주어야 한다. 근데 이러면 변경한 것이 아닌가? 변경에는 닫혀 있어야 한다고 했는데.. 다형성을 사용했지만 OCP 원칙을 지킬 수 없는 것인데.. 위 문제를 해결하기 위해 객체를 생성 하고 관계를 맺어 주는, 별도의 설정자 가 필요하다. 이 원칙을 지키기 위해 Spring에서는 IoC, DI 라는 기능을 지원해주고 있다. LSP: 리스코프 치환 원칙 프로그램의 객체는 프로그램의 정확성 을 깨뜨리지 않으면서 하위 타입의 인스턴스 로 바꿀 수 있어야 한다. 자식 클래스는 언제나 부모 클래스를 대체할 수 있다는 원칙이다. 부모 클래스가 들어갈 자리에 자식 클래스를 넣어도 계획대로 잘 작동해야 한다는 것. 예시로, 자동차 인터페이스의 엑셀은 앞으로 가라는 기능이고, 이를 뒤로 가게 구현하면 LSP 위반인 것이다. 느리더라도 앞으로 가게 해야 한다. ISP: 인터페이스 분리 원칙 특정 클라이언트를 위한 인터페이스 여러 개 가 범용 인터페이스 하나 보다 낫다. 기능에 맞게 적당한 크기로 인터페이스를 잘게 쪼개 야 한다. 자동차 인터페이스 -> 운전 인터페이스, 정비 인터페이스 로 분리 사용자 클라이언트 -> 운전자 클라이언트, 정비사 클라이언트로 분리 위 예시에서, 정비 인터페이스 자체가 변해도 운전자 클라이언트에 영향을 주지 않는다. ISP를 통해 인터페이스가 더 명확해지고, 대체 가능성도 높아지는 결과를 불러온다. DIP: 의존관계 역전 원칙 프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다. 자동차 예시로, 운전자는 자동차의 역할(인터페이스)에 대해 알아야 하지 아반떼나 소나타 같은 구현체를 알면 안된다. 인터페이스가 아닌 구현체를 알게 될 경우, 구현 대상이 바뀌면 운전자에 영향을 주기 때문에 다형성에 위배 된다. 변경이 아주 어려워진다는 의미이다. 정리 객체 지향의 핵심은 다형성 이다. 하지만, 다형성 만으로는 구현 객체를 변경할 때 클라이언트 코드도 함께 변경되기 때문에 OCP, DIP 를 지킬 수 없다. 하지만, 뒤에 배울 Spring은 DI 라는 기술을 통해 다형성 + OCP, DIP를 가능하게 지원해준다.
What RADAR observed and classified to build this opportunity. It is what the source published, not a verification that the offer is still active.
좋은 객체 지향 프로그래밍이란?. 인프런 김영한 강사님의 스프링 핵심 원리 - 기본편의 섹션 2를 정리한 내용입니다. 객체 지향 프로그래밍이란? 컴퓨터 프로그램을 " 객체 "들의 모임으로 파악하고자 하는 것 각자의 " 객체 "는 메시지를 주고받고 데이터 처리가 가능 프로그램을 유연 하고 변경이 용이 하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용 유연하고 변경이 용이하다? 레고 블럭 조립하듯이, 부품을 갈아 끼우듯이 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법 유연함과 변경이 용이하게 만드는 객체지향의 핵심은 바로 다형성 이다. 다형성이란? 실세계로 비유하자면, 운전자 - 자동차 예시 자동차가 바뀌어도 운전자에게는 영향을 주지 않음 왜? 자동차 라는 역할의 인터페이스는 바뀌지 않으니까.…
Open source