스프링은 자바 언어 기반의 웹 프레임워크이고, 자바는 객체 지향 언어이다.그렇다면 좋은 객체 지향 프로그래밍이란 무엇일까?
객체 지향 프로그래밍이란 ??
객체 지향 프로그래밍(OOP)
- 객체 지향 프로그래밍( Object Oriented Programming ) 은 컴퓨터 프로그래밍 패러다임 중 하나이다.
- OOP는 컴퓨터 프로그램을 명렁어의 시각에서 벗어나 객체들의 모임으로 파악하고자 한다.
- OOP는 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다.
객체 지향 프로그래밍의 특징
- 객체 지향 프로그래밍은 추상화, 상속, 다형성 등이 있으며 다중 상속 등의 특징 또한 존재한다.
- 위에서도 언급한 유연하고 변경이 용이한 좋은 객체 지향 프로그래밍을 하기 위해서는 다형성이 매우 중요하다.
객체 지향 프로그래밍의 5가지 설계 원칙 (SOLID)
- SRP: 단일 책임 원칙(single responsibility principle)
- 한 클래스는 하나의 책임을 가진다.
- OCP: 개방-폐쇄 원칙 (Open/closed principle)
- 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
- 기능을 추가하려면 소스코드의 수정이 불가피하다. 다형성을 이용하더라도 클라이언트 코드를 변경해야 한다. 이는 OCP 원칙에 위배되는 것이다. 이것을 해결하기 위해서는 객체를 생성하고, 연관관계를 맺어주는 별도의 조립, 설정자가 필요하다.
- LSP: 리스코프 치환 원칙 (Liskov substitution principle)
- 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
- 다형성에서 하위 클래스는 인터페이스 규약을 다 지켜야 한다는 것, 다형성을 지원하기 위 한 원칙, 인터페이스를 구현한 구현체는 믿고 사용하려면, 이 원칙이 필요하다.
- ISP: 인터페이스 분리 원칙 (Interface segregation principle)
- 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
- DIP: 의존관계 역전 원칙 (Dependency inversion principle)
- 프로그래머는 “추상화에 의존해야지, 구체화에 의존하면 안된다.” 구현 클래스에 의존하지 말고, 인터페이스에 의존하라는 뜻이다.
(참고 - 위키백과)
스프링이란 ??
스프링의 정의
- 스프링은 엔터프라이즈용 Java 애플리케이션 개발을 편하게 할 수 있게 해주는 오픈소스 경량급 애플리케이션 프레임워크이다.
- 다른 기술들과 다르게 개발 초기에 기본적인 설정과 적용시킬 기술들만 잘 선택한다면, 기술보다는 애플리케이션의 로직 자체에 더 집중하여 비즈니스 로직을 구현할 수 있다.
(참고) 스프링의 오픈소스와 경량급
- 오픈소스
- 스프링은 모든 사용자에게 무료로 열려 있다. 즉, 어떤 개인 및 기업도 스프링을 사용하여 웹 애플리케이션을 개발을 할 수 있으며, 필요하다면 스프링의 코드를 일부 수정하여 사용하여도 무관하다. 이처럼 오픈소스로 프로젝트를 공개해 놓으면 여러 사람이 프로젝트의 코드를 사용해봄으로써 다양한 검증 과정을 거칠 수 있다는 장점이 있다.
- 스프링은 오픈소스 프레임워크이지만, 안정적인 개발과 개선이 보장된다. 현재 스프링은 오픈소스로 배포되어 누구나 이용할 수 있지만, 스프링소스(SpringSource)라는 IT기업에서 관리하고 있으며, 스프링의 소스 코드를 수정하거나 개선하는 일에는 스프링소스의 한정적인 인원만 참여할 수 있다.
- 경량급
- 스프링은 수십개의 세부 모듈 및 수십만줄의 방대한 코드로 이루어진 프레임워크이다. 스프링을 정의함에 있어 경량급이라 함은 기존에 스프링 대신 사용하던 기술들과 비교하여, 스프링을 사용했을 때에 개발자가 작성해야 할 코드가 상대적으로 단순하다는 것을 의미한다.
- 따라서, 스프링을 정의함에 있어 경량급 애플리케이션 프레임워크라 함은, 스프링을 사용함으로써 기존 기술을 사용할 때에 불가피하게 작성해야만 했던 불필요하게 복잡한 코드를 제거하여 코드의 복잡성을 낮출 수 있음을 의미한다.
(참고) 프레임워크와 어플리케이션 프레임워크
- 웹 개발에 있어 프레임워크란, 어떠한 목적을 쉽게 달성할 수 있도록 해당 목적과 관련된 코드의 뼈대를 미리 만들어둔 것을 의미한다.
- 일반적으로 프레임워크는 특정 업무 분야 혹은 하나의 기술에집중한다. 반면, 애플리케이션 프레임워크는 특정 업무 분야 및 특정 기술이 아니라, 애플리케이션 개발에 필요한 모든 과정에 집중한다. 따라서 애플리케이션 프레임워크는 애플리케이션을 개발하는 데에 있어 필요한 모든 업무 분야 및 모든 기술과 관련된 코드들의 뼈대를 제공한다.
스프링의 특징
- POJO 프로그래밍
- POJO란, Plain Old Java Object, 즉 순수 Java만을 통해서 생성한 객체를 의미한다.
- 순수 Java 만을 사용한다는 것은 Java 및 Java의 스펙에 정의된 기술만 사용한다. 즉 다른 기술을 사용하지 않는 순수한 Java만을 사용하여 만든 객체인 것이다.
- 반면, POJO는 순수 Java만을 사용하여 만든 객체이므로 특정 기술이나 환경에 종속되지 않는다. 따라서, 외부 기술이나 규약의 변화에 얽매이지 않아, 보다 유연하게 변화와 확장에 대처할 수 있다
- POJO 프로그래밍의 특징
- IoC / DI (Inversion of Control / Dependency Injection, 제어의 역전 / 의존성 주입 )
- AOP (Aspect Oriented Programming, 관심 지향 프로그래밍)
- PSA (Portable Service Abstraction, 일관된 서비스 추상화)
'2023-24 동계 모각코' 카테고리의 다른 글
2024.01.31 모각코 4회차 결과 (1) | 2024.02.07 |
---|---|
2024.01.05 모각코 3회차 결과 (0) | 2024.01.07 |
2023.12.29 모각코 2회차 결과 (0) | 2024.01.02 |
2023.12.29 모각코 2회차 계획 (0) | 2024.01.02 |
2023.12.26 모각코 1회차 계획 (2) | 2023.12.27 |