developer-ellen
인간 디버거의 로그 찍기
developer-ellen
전체 방문자
오늘
어제
  • 분류 전체보기 (217)
    • 회고록 (0)
    • 취뽀 및 커리어 여정의 Stack (2)
      • SSAFY 7기 (2)
    • 프로그래밍공부 (24)
      • c++ (0)
      • JAVA (3)
      • Spring (5)
      • design pattern (3)
      • BackDB (1)
      • Servlet&JSP (3)
      • Vue (4)
      • JPA (4)
      • Infra (1)
      • Linux (0)
    • AI (3)
      • papers (3)
      • trend (0)
    • 프로젝트진행 (0)
      • 데이터베이스 (0)
      • 서버개발 (0)
      • 인공지능 (0)
      • 하루정리 (0)
    • 포트폴리오 (0)
    • 알고리즘 (158)
      • 알고리즘문풀 (155)
      • 알고리즘공부 (3)
    • 통계공부 (15)
      • 시계열분석 (15)
      • 회귀분석 (0)
    • CS (14)
      • 컴퓨터네트워크 (4)
      • 운영체제 (8)
      • 데이터베이스 (2)
    • 주저리주저리 (0)
      • 필사 (0)
    • 취업관련정보 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 삼성코테구현풀이
  • 삼성코테자바풀이
  • 삼성코테구현문제추천
  • 삼성코테파이썬풀이
  • 통계학
  • 삼성코테자바꿀팁
  • 코테파이썬
  • 삼성코테기출자바풀이
  • 백준파이썬풀이
  • SW역량테스트파이썬
  • 삼성코테파이썬준비
  • c++ 빌더 패턴
  • 시계열
  • ARIMA모형
  • c++디자인패턴
  • 카카오코테java풀이
  • 삼성코테파이썬
  • Arima
  • SW역량테스트파이썬풀이
  • 삼성코테기출
  • BOJ파이썬풀이
  • 삼성코테자바준비
  • 카카오코테
  • 통계분석
  • MA모형
  • 삼성코테준비
  • 운영체제인터럽트
  • AR모형
  • 데이터분석
  • 시계열분석

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
developer-ellen

인간 디버거의 로그 찍기

스프링이란 - 1
프로그래밍공부/Spring

스프링이란 - 1

2022. 4. 10. 00:41
  • 스프링

1. 스프링이란?

  • 스프링은 자바 언어 기반의 프레임워크이다.
  • 자바 언어의 가장 큰 특징은 객체 지향 언어인데 스프링은 이런 객체 지향 언어가 가진 강력한 특징을 살려낼 수 있는 프레임 워크이다.
  • 스프링을 통해 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와줄 수 있다.

 

2. 객체 지향 프로그래밍이란 ?

  • 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위인 "객체" 들의 모임으로 파악하고자 하는 것이다.
  • 이런 객체 지향 프로그래밍 안에서 객체는 메시지를 주고 받고 데이터를 처리할 수 있다.
  • 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들어줘 대규포 소프트웨어 개발에 많이 사용된다.
유연하고, 변경이 용이하다는 게 프로그래밍에서 어떤 의미인가 ?
레고, 블록이 조립되듯이 프로그램 내 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법

 

3. 객체 지향의 특징

OOP is a A P.I.E

  • Abstraction(추상화) : 현실의 객체를 추상화해서 클래스를 구성
  • Polymorphism(다형성) : 하나의 객체를 여러가지 타입(형)으로 참조
  • Inheritance(상속성) : 부모 클래스의 자산을 물려받아 자식을 정의함으로써 코드의 재사용이 가능
  • Encapsulation(데이터 은닉과 보호) : 데이터를 외부에 직접 노출시키지 않고 메서드를 이용해 보호
객체 지향의 특징 중 다형성이라는 특성에 특히 스프링은 강점이 있다.

4. 다형성

1) 다형성의 실세계 비유

  • 실세계와 객체 지향을 1:1로 매칭할 수 없으나 그래도 실세계의 비유로 이해하기 좋다.
  • 역할과 구현으로 세상을 구분할 수 있다.

  • 운전자 - 자동차의 예시를 보면 운전자는 자동차의 사용방법 안다면  자동차의 구현체인 K3, 아반떼, 테슬라 모델인 어떤 자동차를 사용해도 자동차의 역할로 운전을 할 수 있다.
  • 공연무대의 예시를 보면 로미오 역할과, 줄리엣 역할에 대해 수행할 수 있는 역할자는 다양하고, 역할을 대체하여 수행해도 공연에는 큰 문제가 없다.
  • 또한 다형성에 실세계 비유에는 키보드-마우스, 세상의 표준 인터페이스들 등이 존재한다.

 

2) 역할과 구현을 분리

  • 위의 예시처럼 역할과 구현으로 구분하면 세상이 단순해지고 유연해지며 변경이 편리해진다.
  • 장점
  • 클라이언트는 대상의 역할(인터페이스)만 알면 되며 구현 대상의 내부 구조를 몰라도 된다.
  • 클라이언트는 구현 대상의 내부 구조가 변경되어도 영향을 받지 않으며 구현 대상 자체를 변경해도 영향을 받지 않는다.

3) 자바 언어에서 이런 역할과 구현을 분리하는 방법

  • 자바 언어의 다형성을 활용하여 역할은 인터페이스, 구현은 인터페이스를 구현한 클래스와 구현객체로 할 수 있다.
  • 객체를 설계할 때는 역할과 구현을 명확히 분리해야한다.
  • 객체 설계 시 역할(인터페이스)를 먼저 부여하고, 그 역할을 수행하는 구현 객체를 만드는 게 좋다.

4) 자바 언어의 다형성

  • 자바 언어에서 오버라이딩으로 다형성의 특징을 보여줄 수 있다.
  • 다형성으로 인터페이스를 구현한 객체를 실행 시험에 유연하게 변경할 수 있다.
  • 또한 클래스 상속 관계에서도 다형성, 오버라이딩이 적용 가능하다.
  • 예시

  • 예시를 보면 만약 Member의 데이터를 관리하는 MemberRepository라는 인터페이스를 먼저 구현하고 실제로 메모리에 올리는 MemoryMemberRepository와 JDBC로 부터 데이터베이스에 관리하는 JdbcMemberRepository 두 가지 중에 아무거나 사용해서 구현해도 데이터의 관리의 기능을 클라이언트가 사용할 수 있다.
// 둘 다 사용 가능하여 쉽게 갈아 끼울 수 있음

public class MemberService {
	private MemberRepository memberRepository = new MemoryMemberRepository();
}

public class MemberService {
	private MemberRepository memberRepository = new JDBCMemberRepository();
}

 

5) 다형성의 본질

  • 인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다.
  • 다형성의 본질을 이해하면 협력이라는 객체 사이의 관계에서 시작해야 한다.
  • 클라이언트를 변경하지 않고 서버의 구현 기능을 유연하게 변경할 수 있다.

 

5) 한계

  • 역할(인터페스) 자체가 변하면 클라이언트, 서버 모두에 큰 변경이 발생한다.
  • 따라서 인터페이스를 안정적으로 잘 설계하는 것이 중요하다.

 

 

 

인프런의 김영한님의 "스프링 핵심원리"라는 강의를 보고 직접 공부하면서 작성하였습니다.

혹시 문제가 있다면 바로 삭제하겠습니다.

'프로그래밍공부 > Spring' 카테고리의 다른 글

Spring Bean의 개념과 생성원리 및 과정  (0) 2022.09.04
스프링 컨테이너  (0) 2022.06.15
IoC, DI 그리고 Container  (0) 2022.06.15
스프링이란 - 2  (0) 2022.04.11
    '프로그래밍공부/Spring' 카테고리의 다른 글
    • Spring Bean의 개념과 생성원리 및 과정
    • 스프링 컨테이너
    • IoC, DI 그리고 Container
    • 스프링이란 - 2
    developer-ellen
    developer-ellen

    티스토리툴바