일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 회고록_코드스테이츠
- JAVA기본
- Git #회고록
- 사용자계정 #WSL2
- 시작 #꾸준히 #과하지않게
- OOP
- Java환경
- 에러해결
- 코드스테이츠 #회고록
- 코드스테이츠 #
- 롤중독
- mapstruct
- 피드백
- 네트워크 기초
- 호스트주소 #Host주소
- 회고
- 인터넷 #ISP
- 정리글 작성법
- 코딩테스트
- jvm
- 회고 #주간회고
- WSL #Linux #ubuntu
- 글 foramt
- 몰입학습 #몰입
- 백엔드로드맵
- WSL2 #권한
- 공부방식
- git #intellij
- 회고록
- String
- Today
- Total
느리더라도 꾸준히
[JAVA기본]컴포넌트와 인터페이스 본문
이 글에서 쓰이는 컴포넌트와 인터페이스(API, OPEN API)는 사실 Java와 큰 관련은 없지만, 용어들을 정리한다는 느낌으로 작성했다.
컴포넌트
정의
소프트웨어 시스템에서 독립적인 기능을 수행하는 모듈이다. 실행 기능의 단위로 사용된다.
아래 글을 읽으며 독립적이란 말을 체감해보자.
탄생 배경
모듈들에는 여러 버전과 종류의 패키지들이 들어있기 때문에 서로 호환되지 않을 때가 있었다. 그러므로 수시로 모듈을 수정하여 재컴파일 해야하는 불편함이 존재했었다.
다시 말하자면, 객체 지향은 소스 코드 설계에 있어서 재 사용성을 가지고는 있으나, 실행되고 있는 소프트웨어 부분에서는 재 사용성이 부족해 개발 생산성을 떨어트릴 수 있었다. 그렇기 때문에 독립적인 단위 모듈의 Component 와 CBD(Component Base Development) 개발 방법론이 탄생하게 되었다.
특징
1. 컴포넌트는 독립적인 단위 모듈이다.
- 예를 들면 스마트폰과 배터리가 있다고 가정하자. 만약 스마트폰의 배터리 수명이 다했을 경우 배터리를 구입하여 교체해주면 된다.
- 컴포넌트는 앞에서의 하드웨어(배터리)처럼 독립적인 기능을 수행하고 추후에 교환(S/W 재사용성)도 쉽게 할 수 있는 독립적인 단위의 모듈이라고 할 수 있다.
2. 컴포넌트는 구현, 명세화, 패키지화, 그리고 배포 될 수 있어야한다.
컴포넌트의 정의나 형태는 관점에 따라 다양하게 존재하지만 재사용 부품으로서의 컴포넌트가 되기 위해서는 아래의 내용을 만족 해야한다.
- 소스코드(soure code)가 아닌 실행코드(execute code) 기반으로 재사용할 수 있도록 이미 구현(implemetntation)이 완료되어 있어야만 한다.
- 컴포넌트는 해당 컴포넌트의 용도, 유형, 기술표준과 인터페이스등에 대한 정보들에 대해서 명세화(specification)되어 있어야만 한다.
- 교체가능한 컴포넌트를 개발하기 위해서는 표준(standard)을 준수하여 개발해야한다.
- 컴포넌트가 개발되어 배포될 때 관련 문서와 코드들이 독립적인 단위로 패키지화(packaing)되어 있어야만 한다.
- 컴포넌트는 독립적인 업무 단위로 개발된 것이므로 사용자가 필요한 기능만을 패키지한 컴포넌트를 재사용할 수 있도록 독립적으로 배포(deployment) 가능해야만 한다.
3. 하나의 컴포넌트는 하나 이상의 클래스로 구성될 수 있다.
하나의 컴포넌트를 개발하기 위해서는 하나 이상의 클래스들을 바탕으로 개발할 수 있으며 이렇게 개발된 컴포넌트가 실행될 때 해당 컴포넌트 인스턴스(Instance)인 컴포넌트 객체가 수행된다. 이때 컴포넌트 내부에는 하나 이상의 클래스에 대응하는 하나 이상의 객체들이 수행되고 있는 것이라고 생각할 수 있다.
4. 컴포넌트는 인터페이스를 통해서만 접근할 수 있다.
컴포넌트내의 정보는 인터페이스를 통해 외부로부터 모두 숨겨진다. (정보은닉)
따라서 외부에서 접근할 수 있도록 명세화된 인터페이스 정보를 제공한다. 인터페이스는 외부와의 연결을 위해 반드시 존재 해야하며, 이처럼 컴포넌트가 내부 정보를 숨기고 인터페이스만 제공함으로써 소프트웨어도 하드웨어처럼 조립 기반으로 갈 수 있게 되는 것이다.
- 1번에서 예시로 들었던 휴대폰과 배터리에 단자가 있다고 생각해보자. 충전이라는 기능을 위해서는 알맞은 배터리 단자가 오도록 설명서가 필요하고, 알맞은 단자를 끼게 되면 원하던 충전이라는 기능을 동작 시킬 수 있는 것이다.
모듈과 컴포넌트
모듈은 설계의 관점에서 필요한 기능 단위라면, 컴포넌트는 실행(런타임) 관점에서 필요한 독립적인 실행 기능 단위라고 볼 수 있다.
인터페이스
정의
인터페이스(interface)는 서로 다른 두 개의 시스템 혹은 장치 사이에서 정보나 신호를 주고받는 경우, 접점이나 경계면에 위치하여 사용자가 기기를 쉽게 동작시키는데 도움을 주는 시스템을 의미한다.
컴포넌트에서 말했듯, 독립적으로 기능들이 재사용 되기 위해서는 인터페이스와 관련된 내용을 명세화하여 호출이 가능해야 한다.
이때의 인터페이스를 API(Application Programming Interface) 라고 부른다.
- 여기서 Application Programming은 일반적으로 모든 운영체제에서 동작하는 소프트웨어를 말한다.(쉽게 말해 일반적인 모든 프로그램들을 지칭함)
- 웹 개발 입장에서는 웹 브라우저(클라이언트)와 웹 서버 PC 사이에서 동작한다.
일반적으로 API는 내부 개발자들이 호출해서 사용하는 인터페이스며, 외부적으로 API를 호출해서 사용할 수 있도록 오픈 하는 것을 OPEN API라고 한다.
그래서 OPEN API는 특정 URI, URL, 인터페이스명, 파라미터와 이에 어떻게 응답할 것인지에 대한 명세를 같이 제공하여 외부 개발자들도 사용할 수 있도록 한다.
OPEN API 예시
출처
https://hanamon.kr/컴포넌트-component란/#:~:text=결론적으로 컴포넌트는 각각,될 수 있기 때문이다.
'Java' 카테고리의 다른 글
[JAVA기본]패키지와 모듈 (0) | 2022.12.05 |
---|---|
[JAVA기본]함수 클래스 객체 인스턴스 (0) | 2022.12.03 |
[OOP]객체지향 프로그래밍(OOP) - (5) 싱글톤 패턴 (0) | 2022.11.20 |
[OOP]객체지향 프로그래밍(OOP) - (4) SRP(Single-Relationship Principle) (0) | 2022.11.20 |
[Java기본]생성자와 필드의 초기화 시점 및 순서 (0) | 2022.11.20 |