티스토리 뷰

반응형

사람을 사랑한 기술

기계어에서 객체 지향 프로그래밍 언어로

SOA(Service Oriented Architecture): 기존 서비스조합해 하나의 업무를 구현한다.( 소프트웨어의 재사용성과 레고 웨어의 연장선)(=서비스 지향 개발)

CBD 개발_방법론(Component Based Development)이란 사용 기능한 *_컴포넌트의 개**발 또는 상용 컴포넌트를 조합해 애플리케이션 _개발_생산성과 품질을 높인다.( = 블록화 개발)

  기계어 어셈블리어 C 언어
개발자 코딩 0과 1 일상 단어 수학적 기호
소스 파일 기종별 기종별 단 하나
목적 파일(기계어) 소스 그 자체 어셈블러로 번역 컴파일러 번역
기계어 비교   기계어와 1대1 대응 기계어와 m 대 n 대응
  • c++ 은 c 에 객체 지향 개념을 도입하였더,

객체 지향의 4 대 특성을 이 책을 읽고 이해해야한다.( 3장)

  • 스프링은 일종의 사상이다. 개념은 일종의 oop 프레임워크 이다.

  • oop 프레임워크 with IOC, DI, AOP,PSA, WEB,ORM, Security,...

  • 스프링 삼각형: IoC/DI, AOP, PSA

  • 회사용 애플리케이션을 만드는데 필요한 모든 서비스를 제공해준다.

이 책의 목표

  • oop 개념
  • 자바 언어와 문법
  • 자바가 oop 개념을 구현한 방식

자바와 절차적 , 구조적 프로그래밍

자바에서 변수가 메모리에 어떻게 저장되고 사용되는지, 메서드가 어떻게 호출되고 메모리에 어떤 변화를 불러일으키는지 살펴본다.

자바 프로그램의 개발과 구동

JDK: 자바 개발 도구

JRE: 자바 실행 환경

JVM: 자바 가상 기계

  • [프로그램이 메모리를 사용하는 방법]

위는 기계어 포함 모든 프로그래밍 언어의 공통된 메모리 사용 방식이다.

객체 지향 프로그램에서는 데이터 저장영겨을 다시 세 개의 영역으로 분할해 사용한다.

  • [객체 지향에서의 메모리 사용 방식] (T 메모리 구조라 부른다.)

  • 자바에 존재하는 절차적, 구조적 프로그래밍의 유산

    • 절차적 프로그래밍: goto 를 쓰지 말라는 것이다.( => 프로그래밍 실행순서 단순화 )
    • 구조적 프로그래밍: 함수를 사용하라.( 코드 단순화 , 중복 최소화)

다시보는 main() 메서드: 메서드 스택 프레임

public class Start {
  public static void main(String[] args) {
    System.out.println("Hello OOP!");
  }
}
  • [T 메모리 구조]

  1. JRE 는 먼저 프로그램 안에 main() 메소드를 확인한다. 이후, jvm 에 전원을 넣어 부팅한다. jvm은 메모리 구조를 만든다. 제일 먼저하는 일을 전처리라고 한다. 전처리 1단계로 java.lang 패키지를 스태틱 영역에 갖다 놓는다. 이로 인해 System.out.println 등을 쓸 수 있게 된다.
  2. 전처리 2단계. 개발자가 작성한 모든 클래스와 임포트 패키지를 스태틱 영역에 가져다 놓는다. 그래서 스태틱 영역을 클래스들의 놀이터라 부른다.( 각종 클래스 로딩)

  1. main 메소드 스택 프레임 배치: main() 메서드가 수행되기 위해 스택 프레임에 스택 영역이 할당된다. ( 여는 중괄호 하나당, 스택 프레임이 하나씩 쌓인다고 봐도 무방하다. )
  2. main 메소드 스택 프레임 변수 공간 배치:main(String[] args)의 메소드 인자들의 변수 공간을 할당한다. ( ->main()` 메서드가 첫 명령문을 실행하게 된다.)

  1. main 메소드 끝 : jre 는 jvm 을 종료하고, jre 자체도 운영체제 상 메모리에서 사라진다. (T 메모리도 소멸)

변수와 메모리

  • if 문도 스택 메모리 안에서 해소된다.
  • 변수는 T 메모리의 세 군데 다 있다. 각각의 이름도, 지역 변수, 클래스 멤버 변수, 객체 멤버 변수로 다르게 불린다.
package com.hello.hellospring.domain;

public class Start {
  public static void main(String[] args) {
    int i;
    i = 1;
    double d = 20.0;
  }
}

전역 변수와 메모리

  • 스택 프레임에 종속적인 지역 변수
  • 스택 프레임에 독립적인 전역 변수


자바와 객체 지향

함수의 목적은 1순위. 중복 제거, 2순위, 분할 정복이다.

객체 지형의 4대 특성: 캡! 상추다

캡: 캡슐화 =정보 은닉

상: 상속 = 재사용

추: 추상화 = 모델링

다: 다형성 = 사용 편의

붕어빵틀 vs 붕어빵 이런 비유 들지 말구 펭귄: 뽀로로, 인간: 김연아 를 들어라

추상화=모델링

자바는 객체 지향의 추상화를 class 키워드를 통해 지원하고 있다.

객체: 세상에 존재하는 유일무이한 사물

클래스: 분류, 집합 같은 속성과 기능을 가진 객체를 총칭하는 집합의 개념

추상화: 구체적인 것을 분해해 관심 영역에 대한 특성만을 가지고 재조합하는 것이다.

추상화: 구체적인 것을 분해해 관심영역(application boundary)에 있는 특성만 가지고 재조합 하는 것 = 모델링

사람 홍길동  = new 사람();
  • oop 의 추상화는 모델링이다.
  • 클래스: 객체 = 펭귄: 뽀로로
  • 클래스 설계에서 추상화가 사용된다.
  • 클래스의 설계를 위해서는 어플리케이션 경계부터 정해야한다.
  • 객체 지향에서의 추상화의 결과는 클래스이다.

추상화 예시

  • 상속을 통한 추상화, 구체화
  • 인터페이스를 통한 추상화
  • 다형성을 통한 추상화

상위 클래스는 물려줄 특성이 풍성할수록 좋고, 인터페이스는 구현을 강제할 메소드의 개수가 적을 수록 좋다.

인터페이스는 be able 무엇을 할 수 있는 HAS A 형태를 가지고 있다. 상속은 is a 를 사용하고, is kind of 라는 의미를 담고 있다.

*상속을 하는 경우 " 펭귄 클래스"의 인스턴스만 힙 영역에 생긴 게 아니라 animal 클래스의 인스턴스도 함께 힙 영역에 생긴 것을 볼 수 있다.( 부모, 자식 모두 힙에 생긴다. Object) *

클래스 멤버 vs 객체 멤버 = static 멤버 vs 인스턴스 멤버

상속: 확장 + 재사용

캡슐화: 정보 은닉


자바가 확장한 객체 지향

클래스 생성시 실행 블록 static 블록

클래스가 스태틱 영역에 배치될 때 실행되는 코드이다.

package staticBlock;
public class 동물{

 static{
         System.out.println("동물 클래스 레디 온");
 }

}

객체 지향 설계의 5원칙 - SOLID

SOLID 는 아래의 5가지 원칙의 앞머리 알파벳을 따서 부르는 이름이다.

  • SRP(Single Responsibility Principle): 단일 책임 원칙
  • OCP(Open Closed Principle): 개방 폐쇄의 원칙
  • LSP(Liskov Substitution Principle): 리스코프 치환의 원칙
  • ISP(Interface Segregation Principle): 인터페이스 분리의 원칙
  • DIP(Dependency Inversion Principle): 의존 역전의 원칙

응집도는 높이고, 결합도는 낮추라는 (High Cohesion, Loose Coupling) 고전 원칙을 객체 지향의 관점에서 재정립한 것이다.

결합도 낮춘다 = 상호 의존도의 감소 = 유지보수, 수정에 유리

응집도 높인다 = 하나의 책임에 집중하게 된다.

SRP(단일 책임 원칙)

하나의 모델은 하나의 책임만 져야한다. 남자는 남자친구, 아들 , 군인의 역할을 하는데 이별하면, 키스를 못채워 힘들다.

이런 형태로 가지 말고, 책임에 따라 분리해 관리하자.

OCP(개방 폐쇄의 원칙)

소프트웨어은 엔티티(클래스, 모듈, 함수 등)는 확장에 대해서 열려있지만, 변경에 대해서는 닫혀있어야한다.

즉, 자신의 확장에는 열려있고, 주변의 변환에 대해서는 닫혀잇어야한다.

예) JDBC 인터페이스

: 얻는 장점 :

  • 유연성, 재사용성, 유지보수성

LSP ( 리스코프 치환 원칙 )

서브 타입은 언제나 자신 기반의 타입(base type)으로 교체할 수 있어야한다.

  • 하위 클래스 is a kind of 상위 클래스 : 하위 분류는 상위 분류의 한 종류이다.
  • 구현 클래스 is able to 인터페이스 : 구현 분류는 인터페이스할 수 있어야한다.

ISP (인터페이스 분리 원칙)

클라이언트는 자신이 사용하지 않는 메소드에 의존 관계를 맺으면 안된다.*

  • 인터페이스 최소 주의 원칙

    • 인터페이스를 통해 메소드를 외부에 제공할 떄 최소한의 메소드만 제공하라는 것이다.

DIP - 의존 역전 원칙

고차원의 모듈은 저차원의 모듈에 의존하면 안된다. 이 두 모듈 모두 다른 추상화된 것에 의존해야한다.

추상화 된 것은 구체적인 것에 의존하면 안된다. 구체적인 것이 추상적인 것에 의존해야한다.

자주 변경되는 구체Concrete 클래스에 의존하지 마라.

== 나보다 변하기 쉬운 것에 의존하지 마라.

(추가) SoC (Seperation Of Concerns)

관심사의 분리의 머리글자이다. 관심이 같은 것끼리는 하나의 객체 안으로, 또는 친한 객체로 모으고, 관심도가 다른 것은 가능한 따로

떨어져 서로 영향을 주지 않게 분리하라.


스프링이 사랑한 디자인 패턴

표준화된 설계 패턴이다. oop 에 입각한다.

  • 스프링
    • 자바 엔터프라이즈 개발을 편하게 해주는 오픈 소스 경량급 애플리케이션 프레임워크

어댑터 패턴


스프링 대삼각형

  • DI/IOC
  • AOP
  • PSA

DI/IOC

의존성 주입

소프트웨어 엔지니어링에서 의존성 주입은 하나의 객체가 다른 객체의 의존성을 제공하는 테크닉이다. "의존성"은 예를 들어 서비스로 사용할 수 있는 객체이다. 클라이언트가 어떤 서비스를 사용할 것인지 지정하는 대신, 클라이언트에게 무슨 서비스를 사용할 것인지를 말해주는 것이다.

  • 생성자, 게터세터, @autowired

AOP(Aspect Oriented Programming)

횡단적 프로그래밍( 관점 지향 프로그래밍)

횡단 관심사의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임이다.

PSA

PSA(Portable Service Abstraction)

서비스 추상화의 예로 JDBC를 들 수 있다. JDBC라고 하는 표준 스펙으로 인해 오라클을 사용하던 MySQL을 사용하던 Connection, Statement, ResultSet을 이용해 공통된 방식으로 코드를 작성할 수 있다.
이처럼 DB의 종류에 관계없이 같은 방식으로 제어할 수 있는 이유는 디자인 패턴중 어댑터(변환기) 패턴을 활용했기 때문이다.
이처럼 어댑터 패턴을 적용해 같은 일을 하는 다수의 기술을 공통의 인터페이스로 제어할 수 있게 한 것서비스 추상화 라고 한다.

반응형

'독후감' 카테고리의 다른 글

스파크 완벽 가이드 3장  (0) 2021.06.27
스파크 완벽 가이드 1-2장  (0) 2021.06.27
쿠버플로우 책 추천  (0) 2021.06.15
조직을 성공으로 이끄는 프로덕트 오너  (0) 2021.04.23
UML 분석 설계 실무 :wip  (0) 2021.02.05
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함