정보처리기사/[주간컴공] 필기 (완)

(주간컴공) 제4과목 프로그래밍 언어 활용 / 객체지향 프로그래밍

web_seul 2022. 4. 18. 10:50
반응형

S1. 객체지향 기술

1. 객체지향 기술의 개념

1) 소프트웨어 위기 : 개발, 유지보수 비용 증대, 하드웨어 기술 대비 약한 기술력, 다양성, 전문성 증가에 비해 평가기준 미흡

2) 객체지향 기술

  - 특징 : 현실세계 개체 -> 디지털 개체(속성+메소드), 객체와 객체간 통신을 통해 프로그램 구현

  - 정의 

     객체 : 속성과 메소드로 구성된 클래스의 인스턴스

     속성 : 객체를 나타내는 자료구조, 상태값 등

     메소드 ; 속성에 대한 연산기능, 객체가 수행하는 행위

3) 장단점 : 객체를 재사용(확장성, 유지보수 용이)하여 쉽고 빠르게 실제 세계와 유사한 형태로 개발, 객체 자체 설계가 어렵고 속도가 비교적 느림

 

2. 객체지향 기술의 구성요소

1) 클래스(Class) : 객체의 타입을 정의하고 객체를 구현(생성)하는 틀, 유사한 성격의 객체들의 공통된 특성을 표현한 데이터 추상화 단위, 기존 언어의 사용자 정의 자료형(구조체)와 함수의 개념을 발전

2) 객체(Object) : 클래스에 의해 구현된 대상들의 총칭으로 현실 세계의 개체와 같은 개념, 객체마다 고유한 속성을 가지며 클래스에 정의된 메소드 수행이 가능

3) 인스턴스(Instance) : 특정 클래스에서 구현된 객체로, 좁은 범위의 객체

4) 메시지(Massage) : 객체들 사이를 상호작용하기 위한 인터페이스(메소드)

 

3. 객체지향 기술의 종류

1) 캡슐화(Encapsulation)

  - 정의 : 문제 해결에 관여하는 속성과 메소드를 하나로 묶는 것

  - 정보은닉(Information Hiding) : 캡슐화의 가장 큰 목적, 클래스 내부 속성과 메소드를 외부의 고려되지 않은 영향(Side Effect)으로 부터 보호

  - 장점 : 재사용이 용이, 중복성 최소화, 인터페이스가 단순(가독성), 정보은폐로 내부 데이터의 일관성 유지, 사이드 이펙트 감소

2) 추상화(Abstract)

  - 개념 : 클래스의 공통된 요소를 추출하여 상위(부모) 클래스로 구현하고 이후 하위(자식) 클래스에서 상세 구현, 복잡한 문제를 간략화하는 기법으로 분석의 초첨이 명확해지고 객체 중심의 안정된 모델링 가능

  - 종류 : 기능 추상화(IPO과정), 자료추상화(데이터와 데이터에 적용될 기능), 제어 추상화(외부 이벤트에 대한 반응)

3) 상속(Inheritance) : 상위 클래스의 속성과 메소드를 하위 클래스에서 사용하도록 하는 기법, 하위클래스는 상위 클래스의 모든 요소를 재사용 또는 확장, 상위 클래스의 추상적인 요소를 하위 클래스가 구체화

4) 다형성(Polymorphism) : 상속된 여러 하위 객체들이 서로 다른 형태를 가질 수 있는 성질, 오버로딩(동일한 이름의 여러 메소드 중, 매개변수로 전달되는 인수의 타입과 개수를 식별하여 적절한 메소드를 호출해주는 기능), 오버라이딩(상속받은 메소드의 내부 기능을 새롭게 정의하는 기능) 기술로 동일한 메소드명으로 서로다른 작업 가능

 

S2. 객체지향 개발절차

4. 객체지향 개발절차

1) 객체지향 분석

  - 체 모델링 : 업무에서 요구되는 객체, 속성(자료구조), 메소드 식별

  - 적 모델링 : 객체들의 기능과 상태파악, 상태, 활동 다이어그램으로 기능의 흐름 표시

  - 능 모델링 : 각 기능 상세분석(제한사항, 성능 등), 제어흐름, 기능의 상호작용 표현(DFD)

2) 객체지향 분석 방법론

  - 럼바우(Rumbaugh) : 가장 대표적, 객체, 동적, 기능 모형으로 분리하여 접근하는 방법

  - Booch : 미시적(micro), 거시적(macro)개발 프로세스로 접근, 클래스 계층 정의 및 클러스터링 작업 수행7

  - Coad&Yourdon : E-R 다이어그램을 사용하여 모델링

  - Jacobson : 사용자와 시스템의 상호작용과정을 서술한 시나리오로 접근하는 방법

  - Wirfs-Brocks : 설계 프로세스 간에 뚜렷한 구분이 없음, 고객 명세의 평가 -> 설계의 연속적인 프로세스

 

5. 객체지향 설계

1) 객체지향 설계의 개념 : 분석이 완료된 모델을 구체적인 절차로 표현, 사용자 중심, 대화식 프로그램 개발에 적합, 클래스를 객체로, 속성을 자료구조로, 기능을 알고리즘으로 표현하는 것에 중점

2) 객체지향 설계 원칙

  - 단일 책임(Single Responsibility) : 단일 클래스가 제공하는 모든 기능은 하나의 책임을 수행해야함, 클래스를 변경하는 이유는 오직 하나, 낮은 결합도, 높은 응집도 유지 가능

  - 개방 폐쇄(Open-Closed) : 소프트웨어 구성요소는 확장에는 열리고, 변경에는 닫혀있어야함

  - 리스코프 치환(Liskov Substitution) : 하위 클래스는 언제나 상위클래스로 교체(호환)할 수 있어야함, 서브 클래스는 상위 클래스가 정의한 제약사항을 준수해야함

  - 인터페이스 분리(Interface Segregation) : 사용하지 않는 인터페이스에 시스템이 영향을 받아서는 안됨, 하나의 일반적인 인터페이스보다 여러개의 구체적인 인터페이스 구성이 좋음

  - 의존성 뒤집기(Dependency Inversion) : 하위 클래스의 변경 사항이 상위 클래스에 영향을 미치지 않도록 해야함 복잡한 컴포넌트들의 관계를 단순화하고 효율적인 커뮤니케이션이 가능하게함

3) 객체지향 설계 순서

  - 객체 설계(객체 연산자 정의 ) : 객체 분석에서 정의된 요구 명세서를 기반으로 객체 연산자를 정의하여 설계

    객체모델 : 객체를 구성하고 있는 클래스와 속성을 객체와 자료구조로 표현

    동적모델 : 설계시 자료화 자료에 가해지는 프로세스를 묶어 정의하고 관계를 규명

  - 시스템 설계(객체 인터페이스 결정) : 객체 설계 단계에서 정의된 객체간의 인터페이스를 정하여 전체적인 시스템을 설계, 분석된 객체 모형을 특성별로 구분한 서브 시스템으로 분할하고 데이터, 자원관리방법을 결정, 객체들의 계층적 구조를 보여주는 계층 차트를 그리고 객체  제어방식 결정

     순차적(Sequentially) 제어방식 : 순서가 존재하는 객체 운영방식

     동시(Concurrent) 제어방식 : 객체 사용을 동시에 수행하는 방식

     이벤트중심(Event) 제어방식 : 사건이 발생할 때마다 객체가 수행되는 방식

 

6. 객체지향 프로그래밍 

  - 클래스르르 정의(명시)하고, 클래스간 계층을 정의하고 객체를 생성

  - 상속과 다형성을 활용

  - 메시지를 통하여 객체 간 상호작용

 

7. 객체지향 데스트

1) 단위테스트 : 객체의 가장 작은 단위로 캡슐화된 클래스나 객체를 검사

2) 통합테스트

  - 스레드기반(Thread-Based Testing) : 시스템에 대한 하나의 입력이나 이벤트에 응답하는데 요구되는 클래스 검정

  - 사용기반(Use-Based Testing) : 상위클래스 영향이 미치지 않는 수준의 하위 클래스들을 독립적으로 검사한 후 사우이 클래스 검증, 구조적 검사 기법의 상향식 통합 방법과 유사함

  - 검증과 시스템 : 사용자의 요구가 객체에 정확히 반영되었는지, 성능이나 인터페이스상 오류는 없는지 검증

 

S3. java언어

1. 클래스와 객체

1) java에서의 클래스

  - 자바는 모든 코드가 클래스

  - main메소드를 포함하는 클래스를 가장 먼저 실행

  - 멤버(member) : 클래스에 포함되는 요소

  - 데이터는 객체생성을 통해 확보

2) 클래스 구성

  - 멤버변수 : 객체가 가지는 모든 상태, 수치, 성질, C언어에서의 구조체(사용자 정의 자료형)와 유사, 다른 객체에서 접근할 수 없도록(정보 은닉)하여 사이드 이펙트를 최소화

  - 멤버 메소드 : 객체에서 발생하는 모든 연산 및 제어, 요청행위, C언어에서의 함수와 유사

3) 접근 지정자

  - 접근 지정자의 정의 : 클래스 내 멤버들의 접근 수준을 결정하는 토큰, 프로그램, 패키지, 하위클래스, 자신의 클래스 순서

  - 접근 지정자의 종류

    public : 프로그램 내 모든 객체에서 접근 가능

    default(생략) : 같은 패키지 않에서만 접근 가능

    protected : 자신과 하위 클래스에서만 접근 가능

    private : 자신의 클래스에서만 접근 가능

4) 생성자

  - 생성자 메소드의 정의 : 클래스 내부가 존재하며 객체가 생성시 자동으로 실행, 객체가 생성될 때 외에는 별도로 실행 불가, 정의되어 있지않으면 자바에서 자동 생성, 객체 생성시 멤버 변수 초기화 처리, 생성자 메소드명은 클래스명과 동일, 리턴타입 없음

  - this : 클래스 자신에 포함된 멤버 변수에 접근하기 위한 토큰, 이름이 동일한 다른 지역 변수와 구분을 위한 사용

  - overloading : 동일한 이름을 가진 여러 메소드를 사용하는 기술, 메소드의 인수 유형과 개수의 차이로 각 메소드 구별, 생성자 메소드 뿐 아니라 모든 메소드에 적용가능

5) 객체 생성

  - 인스턴스 생성 : 새로운 객체를 생성하여 적절한 타입의 변수에 할당, new 키워드를 이용하여 인스턴스 생성 -> 생성자 호출 일반적으로 인스턴스의 타입과 객체 변수의 타입이 동일

  - 객체의 멤버 접근 : 객체변수와 점(.) 이용, 접근 지정자에 따라 직접 접근이 어려울 수 있음, 멤버 변수에 static 키워드를 붙여 생성하면 모든 객체가 공유하는 데이터 생성 가능

 

2. 상속

1) 상위 클래스 : 상위 클래스는 대부분의 속성을 하위 클래스에게 상속, 여러 하위 클래스가 사용할 공통된 속성 구현, 상위 클래스 단독으로 인스턴스 생성가능

2) 하위 클래스 : 상속받은 상위 클래스의 대부분 속성을 포함, extends키워드를 사용하여 상속받을 상위 클래스 지정, 상위클래스의 메소드를 재사용, 재정의 하여 사용

3) overriding : 상위 클래스의 메소드를 재정의하여 사용하는 기술, 상위클래스와 동일한 메소드명과 매개변수 지정

 4) 추상 클래스

  - 추상클래스 개념 : 클래스의 체계적인 설계를 위해 사용하는 클래스, 선언부만 있고 구현부가 없는 추상 메소드를 하나이상 포함, 반드시 하위 클래스에서 상속하여 추상 메소드를 오버라이딩해야 인스턴스 생성이 가능함, 상속된 클래스에서도 구현되지 않은 추상 메소드가 있다면 그 역시 추상 클래스이므로 인스턴스 생성이 불가능함, 각각의 하위 클래스에서 수행되는 유사한 기능을 하나의이름으로 통일시킬 수 있음

  - 추상 클래스 구현 : abstract 키워드를 사용하여 클래스와 메소드 구현, 메소드의 구현부(쭝괄호)를 생략하여 표현, 추상 클래스를 상속받은 후, 해당 메소드를 오버라이딩 함

5) 인터페이스

  - 다중 상속의 문제점 : 둘 이상의 상위 클래스를 상속받는 것, 상위클래스 A, B가 같은 클래스 C를 상속받는 경우와 같이 상속관계가 복잡해지면 알 수 없는 부작용이 발생할 확률 상승

  - 인터페이스의 특징 : 모든 메소드가 추상 메소드로 정의되어 있는 추상 클래스, 상속을 받지않기 때문에 다중 상속의 부정적 영향을 전혀 받지 않고 다중 상속의 장점 활용 가능, 상속은 기존 클래스의 속성을 확장하는 개념을 가지지만 인터페이스는 하나의 확장된 클래스로 기능을 제한하거나 다른 기능을 수행하도록 변경(다형성)

  - 인터페이스 구현 : class대신 interface키워드를 사용하여 구현하고 implements키워드를 사용하여 상속, 확장된 클래스의 인스턴스를 상위 인터페이스 타입의 객체 변수에 할당하여 기능을 변경하거나 제한

 

3. 예외처리

1) 예외처리 개념 : 예외처리는 예외를 해결(처리)하는 코드를 구현, 문법오류(Syntax Error) : 괄호를 잘 못 쓰거나, 함수명에 오타가 있는 등의 문법적인 부분 때문에 실행전 발생하는 문제, 예외 : 문법이나 표현식에 문제는 없지만 의도치않은 작동 및 입력으로 문제가 발생하는 것, 예외를 실별할 영역을 별도로 지정하여 예외가 자주 발생하는 코드 보완

2) try-catch : try블록 코드에서 예외가 발생하면 catch블록 코드 실행, try블록에서 발생한 예외로 인한 프로그램의 강제 종료 방지, 예외 발생이 빈번할 것으로 예상되는 영역을 try블록 지정

3) finally : 생략이 가능한 부분으로 예외 여부와 상관없이 항상 실행되는 블록

 

S4. 파이썬 언어

1. 파이썬의 특징

  - 고급언어, C, Java와 호환 가능

  - 데이터 분석이 쉽고 강력하고 빠르게 개발 가능

  - 비교적 실행 속도가 느림, 하드웨어 제어 어려움

  - 웹 프로그래밍에 적합, 앱 개발 어려움

 

2. 변수와 상수

1) 변수 선언 : 동적할당 : 상수(리터럴)의 타입에 따라 결정, 별도의 자료형을 지정없이 식별자만 지정

2) 변수명 선언 규칙 : 첫 글자 영문자, _ -> 이후 숫자 가능, 대소문자구분, 한글가능(비권장), 키워드 사용불가, 초기화 필수

3) 상수 리터럴 : 상수의 유형에 맞게 코드로 표기하는 방식

4) 표준 입출력 함수

  - 표준 입력 : 키보드를 통해 항상 문자열 형태로 입력(변환 필요), input(prompt) : prompt 출력뒤 사용자 입력 대기

  - 표준 출력 : 모니터를 통해 데이터 출력 + 줄바꿈(변경가능), print(value, ..) : 인수들을 공백(변경가능)으로 구분하여 출력

  - 주석 처리 : #을 이용하여 주석(메모)처리, C언어의 //과 같은 기능

 

3. 연산자

1) 산술 연산자 : 일반적인 연산자+파이썬 특유의 연산자, 결과가 무엇으로 나오는지가 중요

2) 시프트 연산자 : 비트 배열을 좌우로 이동, 2^n이나 2^-n을 표현

3) 비트 연산자 : 각 비트를 자리별로 대응하여 연산, 1을 참, 0을 거짓으로 구분하여 연산

주간컴공

4) 논리비교 연산자 : 다중의 논리 데이터(true, false)를 판별, 데이터 하나와 둘 이상의 데이터 동시 비교가능(-a<b, b<a -> a<b<c로 표현)

5) 멤버 연산자 : 데이터가 특정 데이터 구조에 포함되는지 여부 판별

 

4. 시퀀스

1) 시퀀스 특징 : 하나의 변수로 여러타입, 다수의 데이터관리(배열과 다름), 순서대로 구성되어 인덱싱과 슬라이싱 가능

2) 리스트 : 대괄호와 쉼표로 구분하여 정의, 가변형: 요소추가, 삭제 등 가능

3) 튜플 : 괄호와 쉼표로 구분하여 정의, 불변형: 요소추가, 삭제 등 불가능

4) 시퀀스 기술

  - 인덱싱 : 시퀀스 요소 중 하나를 참조

  - 슬라이싱 : 시퀀스 요소 중 하나 이상을 참조

 

5. 매핑형 자료구조

1) 딕셔너리(가변형) : 하나의 변수로 여러타입, 다수의 데이터 관리(배열과 다름), 키(key)와 값(value)의 쌍으로 구성, 중괄호와 쉼표로 구분하여 정의, 인덱스가 아닌 키로 데이터 접근

 

6. 제어문

1) 선택제어문

  - if-elif-else 

    if<조건식> : 주어진 조건식이 참인 경우에 실행되는 영역

    elif<조건식> : if조건식이 거짓이고, elif의 조건식이 참인 경우에 실행되는 영역

    else : 모든 조건식이 거짓인 경우에 실행되는 영역

  - python에서의 영역 구분 : 파이썬에서는 들여쓰기(띄어쓰기 4칸)로 영역을 구분, 하위 영역이 필요한 구문은 콜론(:)을 사용, 들여쓰기 레벨이 같은 코드는 동일한 영역에 있다고 판단

2) 반복제어문

for

  - for<변수> in range(<시작값>,<종료값>,<증가값>):

    변수를 시작값으로 초기화하고, 종료값 전 단계가 될 때까지 증가값을 더하면서 반복 진행

    ex) range(1,10,2): 1부터 9까지 2씩 더하며 반복진행

  - for<변수> in range(<시작값>,<종료값>):

    증가값을 생략하면 벼수를 1씩 증가하면서 반복

    ex) range(10): 1부터 9까지 1씩 더하며 반복 진행

  - for<변수> in range(<종료값>):

    시작값을 생략하면 변수를 0으로 초기화하여 반복

    ex) range(10): 0부터 9까지 1씩 더하며 반복 진행

  - for<변수> in <시퀀스>:

    시퀀스 요소들을 하나하나 변수에 할당하면서 반복

 

반응형