정보처리기사 필기

정보처리기사 필기 정리(소프트웨어 설계)

도사원 2023. 2. 7. 17:09

리눅스 명령어

pwd 현재 작업중인 디렉토리 정보 출력

cd 경로 이동

ls 디렉토리 목록 확인

cp 파일 혹은 디렉토리를 복사

mv 파일 혹은 디렉토리 이동

cat 파일 출력

uname 시스템 정보 출력

mkdir 디렉토리 생성

find 특정 파일이나 디렉토리를 검색

 

윈도우 명령어

cd 경로 이동

dir 디렉토리에 있는 파일과 하위 디렉토리 목록 확인

md 디렉토리 생성

ipconfig 네트워크 설정상태 보기 (/all 상세하게)

 

시스템 구성요소

입력(Input) / 출력(Output) / 처리(Process) / 제어(Control) / 피드백(Feedback)

 

 

송수신 연계기술

DB link : 데이터베이스에서 제공하는 DB링크 객체를 이용

수신측에서 DB링크를 생성하고 송신측에서 해당 DB링크를 직접 참조하는 방식

DB Connection : 수신측의 WAS에서 송신 측 데이터베이스로 연결하는 DB Connection Pool 생성

API / OpenAPI : 송신측의 데이터베이스에서 데이터를 가져와 제공하는 응용프로그래밍 인터페이스 프로그램

JDBC : 수신 시스템 JDBC 드라이버 이용하여 송신 시스템 DB연결

Hyper Link : 웹 애플리케이션에서 하이퍼 링크 이용

Socket : 서버는 통신을 위한 소켓 생성하여 포트 할당하고 클라이언트 통신 요청 시 클라이언트와 연결

Web Service : WSDL UDDI , SOAP 프로토콜 이용하여 연계

 

디자인 패턴

재사용하기 좋은 형태로 특정 규약을 만들어 정리한 것 / 공통적인 문제들에 대한 표준적인 해법과 작명법을 제안하며

알고리즘과 같이 프로그램 코드로 바로 변환될 수 있는 형태는 아니지만 특정한 상황에서 구조적인 문제를 해결하는 방식

 

생성패턴(Creational Patterns) : 객체 생성에 관련된 패턴

1. 싱글톤 패턴(Singleton) : 클래스의 인스턴스가 하나임을 보장하고 접근할 수 있는 전역적인 접근점을 제공하는

패턴으로, 디자인 패턴의 가장 많이 알려진 패턴입니다.

 

2. 추상팩토리 패턴(Abstract Factory) : 구체적인 클래스를 지정하지 않고 관련성이 있거나, 독립적인 객체들을

생성하기 위한 인터페이스를 제공하는 패턴입니다.

 

3. 빌더 패턴(Builder) : 복학 객체의 생성과정과 표현과정을 분리시켜 동일한 생성과정에서 다양한 표현을 생성할 수

있는 패턴입니다.

 

4. 팩토리 메서드 패턴(Factory Method) : 객체를 생성하는 인터페이스를 정의하지만, 인스턴스를 만드는 클래스는

서브클래스에서 결정하도록 하는 패턴입니다. 팩토리 메서드에서는 인스턴스를

만드는 것을 서브 클래스에서 하게 됩니다.

 

5. 원형 패턴(Prototype) : 생성할 객체의 종류를 명시하는 데 원형이 되는 예시물을 이용하고 새로운 객체를 이 원형들을

복사함으로써 생성하는 패턴입니다.

 

구조패턴(Structural Patterns) : 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴

1. 적응자 패턴(Adapter or Wrapper) : 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는

패턴으로, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이

함께 작동하도록 해주는 패턴입니다.

 

2. 브리지 패턴(Bridge) : 구현부에 추상층을 분리하여 각자 독립적으로 변형할 수 있도록 하는 패턴입니다.

 

3. 데코레이터 패턴(Decorator) : 주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴으로, 기능확장이

필요할 때 서브클래스 대신 쓸 수 있는 대안이 될 수 있습니다.

 

4. 퍼사드 패턴(Facade) : 서브시스템에 있는 인터페이스 집합에 통합된 하나의 인터페이스를 제공합니다.

서브시스템을 좀 더 쉽게 사용하기 위해 고수준의 인터페이스를 정의합니다.

 

5. 프록시 패턴(Proxy) : 어떤 다른 객체로 접근하는 것을 통제하기 위해 그 객체의 매니저 또는 자리 채움자를

제공하는 패턴입니다.

 

행위패턴(Behavioral Patterns) : 객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴

1. 옵저버 패턴(Observer) : 객체들 사이에 1 : N 의 의존관계를 정의하여 어떤 객체의 상태가 변할 때, 의존관계에

있는 모든 객체들이 통지받고 자동으로 갱신될 수 있게 만드는 패턴입니다.

 

2. 상태 패턴(State) : 객체의 내부 상태가 변경될 때 행동을 변경하도록 허락합니다. 객체는 자신의 클래스가

변경되는 것처럼 보이게 됩니다.

 

3. 스트레이트지 패턴(Strategy) : 동일 계열의 알고리즘들을 정의하고, 각각 캡슐화하며 이들을 상호교환 가능하도록

만드는 것입니다. 알고리즘을 사용하는 사용자로부터 독립적으로 알고리즘이 변경될

수 있도록 하는 패턴입니다.

 

4. 템플릿 패턴(Template) : 객체의 연산에서 알고리즘의 뼈대만 정의하고, 나머지는 서브클래스에서 이루어지게 하는

패턴입니다. 템플릿패턴은 알고리즘의 구조는 변경하지 않고 알고리즘의 각 단계를

서브클래스에서 재정의하게 됩니다.

 

5. 비지터 패턴(Visitor) : 객체구조를 이루는 원소에 대해 수행할 연산을 표현합니다. 방문자는 연산에 적용할 원소의

클래스를 변경하지 않고 새로운 연산을 재정의 할 수 있습니다.

 

6. 역할 사슬 패턴(Chain of Responsibility) : 요청을 처리하는 기회를 하나 이상의 객체에 부여하여 요청을 보내는
쪽과 받는 쪽의 결합을 피하는 패턴입니다. 요청을 받는 객체를 연쇄적

으로 묶고 객체를 처리할 수 있을 때까지 요청을 전달합니다.

 

7. 커맨드 패턴(Command) : 요청을 객체로 캡슐화하여 서로 다른 사용자의 매개변수화, 요청 저장 또는 로깅,

연산의 취소를 지원하게 만드는 패턴입니다.

 

8. 인터프리터 패턴(Interpreter) : 주어진 언어에 대해서 문법을 위한 표현수단을 정의하고, 해당 언어로 된 문장을

해석하는 해석기를 사용하는 패턴입니다.

 

9. 이터레이터 패턴(Iterator) : 내부 표현부를 노출하지 않고 어떤 객체 집합의 원소들을 순차적으로 접근할 수 있는

방법을 제공하는 패턴입니다.

 

10. 미디에이터 패턴(Mediator) : 한 집합에 속해있는 객체들의 상호 작용을 캡슐화하는 객체를 정의하는 패턴입니다.

중재자는 객체들이 직접 서로 참조하지 않도록함으로써 객체들간의 느슨한 연결을

촉진시키며 객체들의 상호작용을 독립적으로 다양화 시킬 수 있도록 해줍니다.

 

패턴

클라이언트/서버 패턴 : 클라이언트가 서버에 서비스를 요청하면 서버는 클라이언트에게 서비스를 제공하는 구조

계층화 패턴 : Layer(계층)는 기능 집단을 논리적으로 분리하는 것이고 Tier는 기능집단을 물리적으로 분리하는 구조

MVC 패턴 : 사용자 인터페이스로부터 비즈니스 로직을 분리하여 응용프로그램의 시각적인 요소를 비즈니스 로직의

변화에 영향없이 쉽게 수정할 수 있도록 지원하는 구조

파이터필터 : 서브시스템이 입력데이터를 받아 처리하고 결과를 다른 시스템에 보내는 작업이 반복되는 아키텍처

 

 

 미들웨어

컴퓨터 제작 회사가 사용자의 특정한 요구대로 만들어 제공하는 프로그램

운영체제와 응용 소프트웨어의 중간에서 조장과 중개의 역할을 수행하는 소프트웨어

DB (DataBase) : 데이터베이스 벤더에서 제공하는 클라이언트와 데이터베이스를 연결하는 미들웨어

PRC (Remote Procedure Call) : 원격 프로시저 호출

MOM (Message Oriented Middleware) : 메시지 지향 미들`웨어

TP-Monitor (Transection Processing Monitor) :항공기나 철도 예약 업무 등과 같이 온라인 트랜잭션 업무에서

트랜잭션을 처리하고 감시하는 미들웨어

ORB (Object Request Broker) : 네트워크 호출 미들웨어

WAS (Web Application Server) : 애플리케이션 수행 미들웨어

 

소프트웨어 설계 지침

모듈 내부의 응집도는 강하게 하고 모듈간의 결합도는 약하게 하는 것

적당한 모듈의 크기를 유지

모듈 간의 접속 관계를 분석하여 복잡도와 중복을 줄여야 한다

모듈 간의 효과적인 제어를 위해 설계에서 계층적 자료 조직이 제시되어야 한다.

 

소프트웨어 아키텍처의 시스템 품질 속성

가용성(Availability)

변경용이성(Modifiablility)

성능(Performance)

보안성(Security)

사용편의성(Usabliity)

시험 용이성(Testability)

-공통 모듈 : 전체 프로그램의 기능 중 특정기능을 처리할 수 있는 실행 코드

공통 모듈의 원칙 : 정확성 / 명확성 / 완전성 / 일관성 / 추적성

 

객체지향분석 방법론

Rumbaugh : 일반적으로 사용되는 방법 : 소프트웨어 구성요소를 그래픽 표기법을 이용하여 모델링하는 객체지향분석기법

- Object (객체모델) : 객체다이어그램 이용 / 정보모델링

시스템에서 요구되는 객체를 찾아내어 속성과 연산 식별 및 객체들간의 관계 규정

- Dynamic (동적모델) : 상태도를 이용 / 시간의 흐름에 따른 객체들 사이의 제어흐름, 상호작용, 동작순서

등의 동적인 행위를 표현

- Functional (기능모델) : 자료흐름도(DFD)를 이용 / 자료흐름을 중심으로 처리과정을 표현

*DFD : 자료 흐름 그래프 또는 버블 차트(bubble)

구조적 분석 기법에 이용

자료의 흐름 및 변화 과정과 기능을 도형으로 표현한 것

요소는 화살표(Data Folw), (process), 사각형(Ternimator), 직선(단선/이중선)으로 표시

프로세스
(process)
자료흐림
(Flow)
자료저장소
(Data Store)
단말
(Terminator)
 타원 -> ----
----
 네모

Booch : 미시적, 거시적 개발 프로세스를 모두 사용하는 분석 방

클래스와 객체들을 분석 및 식별하고 클래스의 속성과 연산을 정의

Jacobson : Use Case를 사용하여 분석

Coad Yourdon : E-R 다이어그램을 사용하여 객체의 행위를 모델링

객체식별, 구조식별, 주제정의, 속성과 인스턴스 연결 정의

Wirfs-Brock : 분석과 설계간 구분 없음 / 고객 명세서를 평가하여 평가 설계 작업까지 연속적으로 수행

 

 

Fan-in / Fan-out

Fan-in : 어떤 모듈을 제어(호출)하는 모듈의 수

Fan-out : 어떤 모듈어 의해 제어(호출)되는 모듈의 수

 

CASE (Computer Aided Software Engineering)

소프트웨어 개발 시, 사용되는 분석 자동화 도구

소프트웨어의 개발 기간 단축, 개발비용 절약, 생산성 품질 향상, 효율적이며 신뢰도가 높음

 

UML(Unified Modeling Language)

프로그램 설계를 표현하기 위해 사용하는 표기법 / 모델링 언어 / 객체 지향 시스템을 가시화, 명세화, 문서화 /

요구분석, 시스템 설계, 시스템 구현 등의 시스템 개발 과정에서 개발자간의 의사소통을 원활하게 이루어지게 하기 위하여

표준화한 모델링 언어 / 소프트웨어 시스템, 업무 모델링, 시스템의 산출물을 규정화 하고 시각화 하고 문서화 하는 언어

UML 요소 : Thing (사물)

Relationships (관계) -Dependency Relationship(의존관계)

한 사물의 명세가 바뀌면 다른 사물에 영향을 준다.

일반적으로 한 클래스가 다른 클래스를 오퍼레이션의 매개변수로 사용하는 경우

-Generalization Relationship(일반화관계)

상속관계 있을 때 표시

-Association Relationship(연관관계)

하나의 클래스가 다른 클래스에서 제공하는 기능이 있음을 표시

-Composition Relationship(구성관계)

Diagrams (다이어그램) -Structure UML Diagrams (구조적 다이어그램)

클래스 다이어그램 (Class Diagram) : 클래스 명세와 클래스 간의 관계를 표현 (Class name / Attribute / Operation)
객체 다이어그램 (Object Diagram) : 인스턴스 간의 연관 관계를 표현
패키지 다이어그램 (Package Diagram) : 패키지 간의 연관 관계를 표현
컴포넌트 다이어그램 (Component Diagram) : 파일과 데이터베이스, 프로세스와 스레드 등의 소프트웨어 구조를 표현
복합 구조 다이어그램 (Composite Structure Diagram) : 전체-부분 구조를 가진 클래스를 실행할 때의 구조를 표현
배치 다이어그램 (Deployment Diagram) : 하드웨어와 네트워크 등 시스템의 물리 구조를 표현
프로필 다이어그램 (Profile Diagram) : 말그대로 프로필만 간단하게 구성된 다이어그램

-Behavioral UML Diagrams (행위 다이어그램)

유스케이스 다이어그램 (UseCase Diagram) : 시스템이 제공하는 기능과 이용자의 관계를 표현
-구성요소 : System Scope
actor
Usecase
Relation연관(Assosiation), 의존(Dependency  include(포함), extend(확장)), 일반화(Generalization)
*연관 : usecase  actor의 관계
*확장 : 기본 usecase 수행 시 특별한 조건을 만족할 때 수행할 usecase
*포함 : 시스템의 기능이 별도의 기능을 포함
*일반화 : 하위 usecase/action이 상위 usecase/actor에 기능 역할을 상속받음
*그룹화 : 여러개의 usecase를 단순화 하는 방법
액티비티 다이어그램 (Activity Diagram) : 일련의 처리에 있어 제어의 흐름을 표현
시퀀스(순차) 다이어그램 (Sequence Diagram) : 인스턴스 간의 상호 작용을 시계열로 표현
커뮤니케이션 다이어그램 (Communication Diagram) : 인스턴스 간의 상호 작용을 구조 중심으로 표현
상호작용 개요 다이어그램 (Interaction Overview Diagram) : 조건에 따라 다르게 동작하는 시퀀스 다이어그램을 액티비티 다이어그램안에 포함하여 표현
타이밍 다이어그램 (Timing Diagram) : 인스턴스 간의 상태 전이와 상호 작용을 시간 제약으로 표현
상태 머신 다이어그램 (State Machine Diagram) : 인스턴스의 상태 변화를 표현

 

애자일 개발 방법론

익스트림 프로그래밍, 스크럼, , DSDM, FDD(기능개발중심)

 

애자일 방법론

프로젝트의 요구사항은 기능 중심으로 정의

절차와 도구보다 개인과 소통을 중요하게 생각

작업 계획을 짧게 세워 요구 변화에 유연하고 신속하게 대응

소프트웨어가 잘 실행되는 데 가치는 둠

고객과의 피드백을 중요하게 생각

종류  익스트림 프로그래밍(Extreme Programming), 짝 프로그래밍(Pair Programming),

테스트 주도 개발(Test Driven Development) , 스크럼(Scrum)

 

익스트림 프로그래밍의 5가지 가치

용기 (Courage) : 고객의 요구사항 변화에 능동적인 대처

단순성 (Simplicity) : 부가적 기능, 사용되지 않는 구조와 알고리즘 배제

커뮤니케이션 (Communication) : 개발자, 관리자, 고객 간의 원활한 의사소통

피드백 (Feedback) : 지속적인 테스트와 반복적 결함 수정, 빠른 피드백

존중Respect) : 모든 프로젝트 관지자는 팀원의 기여를 존중

 

객체지향 5가지 원칙

SRP (Single Responsibility Principle) : 단일 책임 원칙  하나의 클래스는 하나의 책임만 가져야함

OCP (Open-Closed Rrinciple) : 개방 폐쇄 원칙  높은 응집도와 낮은 결합도 / 추상화

클래스는 확장에 대해 열려있어야 하며 변경에 대해 닫혀있어야 한다

LSP (Liskov Substitution Principle) : 리스코프 치환 원칙  객체는 프로그램의 정확성을 깨지 않으면서 하위

타입의 인스턴스로 바꿀 수 있어야 한다.

ISP (Interface Segragation Principle) : 인터페이스 분리 원칙  자신이 사용하지 않은 메서드와 의존관계를 맺으면 안된다.

사용하지 않은 인터페이스 때문에 영향을 받아서는 안된다.

DIP (Dependency Inversion Principle) : 의존관계 역전 원칙 - 구현클래스(구현체)가 아니라 인터페이스(역할)에 의존

 

코드

1. 순차코드 (Sequence Code, 일련번호코드)

일정 기준에 따라서 최초의 자료부터 차례로 일련번호를 부여하는 방법

2. 블록코드 (Block Code, 구분코드)

공통성이 있는 것끼리 블록으로 구분하고, 각 블록 내에서 일련번호를 부여하는 방법

ex) 1001~ 1100 : 총무부 , 1101~1200 : 영업부

3. 10진 코드 (Decimal Code, 도서 분류식 코드)

0~9 까지 10진 분할하고 다시 각각에 대해 10진 분할하는 방법

ex) 1000: 공학, 1100: 소프트웨어 공학, 1110 : 소프트웨어 설계

4. 그룹 분류 코드 (Group Classification Code)

일정 기준에 따라 대분류, 중분류, 소분류 등으로 구분 각 구릅안에서 일련번호를 부여하는 방법

ex) 1-01-001 : 본사-총무부-인사계 , 2-01-001: 지사-총무부-인사계

5. 연상코드(Mnemonic Code, 기호코드)

명칭이나 약호와 관계있는 숫자나 문자, 기호를 이용하여 코드를 부여하는 방법

ex) TV-40 : 40인치 , L-15-220 : 15W 220V 램프

6. 표의 숫자코드(Significant Digit Code, 유효 숫자 코드)

길이, 넓이, 부피, 지름, 높이 등의 물리적 수치를 그래도 코드에 적용시키는 방법

ex) 120-720-1500 : 두께XX길이가 120X720X1500인 강판

7. 합성코드(Combined Code)

2개 이상의 코드를 조합하여 만드는 방법

ex) 연상코드 + 순차코드 -> KE-711:대한항공 711

 

소프트웨어 설계의 종류

상위설계 : 아키텍처 설계  시스템의 전체적인 구조를 나타냄

데이터 설계  시스템에 필요한 정보를 자료구조와 데이터베이스 설계 반영

시스템 분할  전체 시스템을 여러 개의 서브 시스템으로 분할

인터페이스 정의  시스템의 구조와 서브 시스템들 사이의 인터페이스를 명확히 정희

사용자 인터페이스 설계  사용자가 익숙하고 편리하게 사용하도록 인터페이스 설계

*사용자 인터페이스 : 사람들이 컴퓨터, 시스템, 기기, 도구 등 그 사이에서 일어하는 상호작용을 매개한 것

종류  CUI (Character based UI) : 문자방식의 명령어 입력 사용자 인터페이스

           GUI (Graphic UI) : 그래픽 환경 기반 마우스 입력 사용자 인터페이스

           NUI (Natural UI) : 사용자의 말과 행동기반 제스처 입력 인터페이스

GUI  CLI 차이점  GUI 그래픽사용자 인퍼테이스  메뉴판을 가르켜라

                              - CLI(Command Line Interface) 명령줄 인터페이스 말 또는 글로 주문

하위설계 : 모듈 설계  각 모듈의 실제적인 내부를 알고리즘 형태로 표현

자료구조 설계  자료구조, 변수 등에 대한 상세한 정보를 작성

 

자료사전 기호

= : 정의 (is composed of)

+ : 구성 (and, along with)

{} : 반복 (iteration)

[] : 선택 (selection)

() : 생략가능 (optional)

** : 주석 (comment)

 

UI 설계 도구

사용자의 요구사항에 맞게 UI의 화면 구조나 화면 배치 등을 설계할 때 사용하는 도구

종류 : 와이어프레임  개발자나 디자이너 등이 레이아웃을 협의 하거나 현재 진행상태등을 공유하기

                                 위해 사용 /  기획단계의 초기에 제작

          목업  와이어프레임보다 좀 더 실제 화면과 유사하게 만든 정적인 형태의 모형

                  시각적으로만 구성 요소를 배치하는 것으로 일반적으로 실제로 구현되지 않음

          스토리보드  와이어프레임에 콘텐츠에 대한 설명, 페이지 간 이동 흐름등을 추가한 문서

                             디자이너와 개발자가 최종적으로 참고하는 작접 지침서

           프로토타입  와이어프레임이나 스토리 보드 등에 인터랙션을 적용함으로써 실제

                               구현된 것처럼 테스트가 가능한 동적인 형태의 모형

         유스케이스  사용자 측면에서 요구사항으로 사용자가 원하는 목표를 달성하기

                              위해 수행할 내용을 기술

 

UI 설계 원칙

직관성 : 누구나 쉽게 이용하고 쉽게 사용할 수 있어야 함

유효성 : 정확하고 완벽하게 사용자의 목표가 달성 될 수 있도록 제작

학습성 : 초보와 숙련자 모두가 쉽게 배우고 사용 할 수 있게 제작

유연성 : 사용자의 인터랙션을 최대한 포용하고, 실수를 방지할 수 있도록 제작

 

소프트웨어 아키텍처의 설계 과정

1. 설계 목표 설정 -> 2. 시스템 타입 결정 ->3. 아키텍처 스타일을 적용하거나 설계 커스터 마이즈

-> 4. 서브시스템 구체화(서브시스템의 기능, 인터페이스 인터랙션 동작을 작성) -> 아키텍처 설계를 검토

 

객체지향프로그램 (OOP)

클래스 : 유사한 객체들을 묶어 공통된 특성을 표현한 데이터 추상화를 의미

OOP : 객체들이 서루 유기적으로 동작하는 프로그래밍 이론 / 코드의 재사용성과 중복제거가 가장 큰 목적

추상화 : 객체의 공통된 속성들 중 필요한 부분을 포착해서 클래스로 정의 하는 설계 기법

기능(구조 추상화) : 입력자료를 출력자료로 변환하는 과정을 추상화 하는 방법

자료추상화: 자료와 자료에 적용할 수 있는 오퍼레이션을 함께 정의하는 방법

제어추상화: 외부 이벤트에 대한 반응을 추상화하는 방법

캡슐화 : 외부에 노출할 필요가 없는 정보들을 은닉

상속 : 상속관계에 있는 두 클래스에 대해, 부모 클래스가 자손 클래스에게 속성을 물려주는 것(재사용 목적)

다형성 : 같은 형태지만 다른 기능을 하는 것(오버라이딩)

 

소프트웨어 설계 추상화 기법

제어 추상화 : 제어의 정확한 메-객체지향프로그램 (OOP)

클래커니즘을 정의하지 않고 원하는 효과를 정하는게 이용하는 방법

기능 추상화 : 입력 자료를 출력자료로 변환하는 과정을 추상화 하는 방법

자료 추상화 : 자료와 자료에 적용될 수 있는 기능을 함께 정의함으로써 자료 객체를 구성하는 방법

 

소프트웨어 공학 모델링

개발팀의 응용문제를 이해하는데 도움을 줄 수 있다

개발 될 시스템에 대하여 여러분야의 엔지니어들이 공통된 개념을 공유하는데 도움을 준다.

철차적인 프로그램을 위한 자료흐름도는 프로세스 위주의 모델링 방법이다

유지보수 마지막단계에서 한다.

 

소프트웨어 설계 시 구축된 플랫폼의 성능 특정분석 사용되는 측정 항목

응답시간 / 처리량 / 자원 / 사용률 / 경과시간

 

구조적 분석 기법

큰문제를 작게 쪼개어 기능으로 분리 / 기능 중심으로 시스템을 파악하며 순차적인 처리가 중요시되는 하향식 방식

 

객체지향 분석 기법

작은 문제들을 해결할 수 있는 객체를 만든다. / 객체들을 상호작용하도록 조합해서 큰 문제를 해결하는 상향식 방식 pwd 현재 작업중인 디렉토리 정보 출력