ABOUT ME

-

Today
-
Yesterday
-
Total
-

Post Calendar

«   2024/09   »
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
  • 정보처리기사 실기 스터디[2022-10-04] - 프로그래밍 언어 활용(클래스)
    자격증/정보처리기사 2022. 10. 4. 15:46

    📌 Study

    🔸 2022-10-04

    [프로그래밍 언어 활용]

    1. 기본 문법 활용하기

    • 클래스

     

    • 접근 제어자 개념 : 지정된 클래스, 변수, 메서드를 외부(같은 패키지이거나 다른 패키지)에서 접근할 수 있도록 권한을 설정하는 기능
    public 외부의 모든 클래스에서 접근이 가능한 접근 제어자
    protected 같은 패키지 내부에 있는 클래스, 하위 클래스에서 접근이 가능한 접근 제어자
    default 접근 제어자를 명시하지 않은 경우로 같은 패키지 내부에 있는 클래스에서 접근이 가능한 접근 제어자, 자바에만 존재
    private 같은 클래스 내에서만 접근이 가능한 접근 제어자

     

    • 클래스 개념 : 객체지향 프로그래밍(OOP)에서 특정 객체를 생성하기 위해 변수와 메서드를 정의하는 틀

     

    • 클래스 정의 : 변수와 메서드(함수) 형태로 구성
        class 클래스명 {
            private:
                변수_타입 변수명;
    
            public:
                반환_데이터_타입 메서드명(데이터_타입 변수명, ...) {
                    명령어;
                return 반환값;
            }
        };
        public class 클래스명 {
            private 변수_타입 변수명;
    
            public 반환_데이터_타입 메서드명(데이터_타입 변수명, ...) {
                명령어;
                return 반환값;
            }
        }
        class 클래스명:
            def 메서드명(self, 변수명, ...):
                명령어;
                return 반환값;

     

    • this 포인터 개념 : this는 현재 객체를 가리키는 포인터, C++, 자바에서 사용하며 클래스 내부의 변수와 함수를 가리킬 수 있음

     

    • C++ this 포인터 문법
        this->변수명;
        this->함수명(매개변수);

     

    • 자바 this 포인터 문법
        this.변수;
        this.함수(매개변수);

     

    • self 개념 : 파이썬에서 현재 객체를 가리키는 포인터, 클래스 내부의 변수와 함수를 가리킬 수 있음
        self.변수명;
        self.함수명(매개변수);
        class A:
            def setA(self, a):
                self.a = a          // 5
    
            def getA(self):
                return self.a
    
        a = A()         // 객체 생성
        a.setA(5)        
        print(a.getA()) // 5

     

    • static 메서드 개념
      • 클래스가 메모리에 올라갈 때 자동적으로 생성되는 메서드
      • 인스턴스를 생성하지 않아도 호출이 가능하게 됨

     

    • static 변수 예제
        class Soojebi {
            static void print() {
                System.out.println("static method");
            }
        }
    
        public class SoojebiMain {
            public static void main(String[] args) {
                Soojebi.print();                     // static method
            }
        }

     

    • 기출
        public class Soojebi {
            public static void main(String[] args) {
                System.out.print(Soojebi.check(1));
            }
    
        ______ String check(int num) {          // main 함수에서 check 함수를 바로 호출 불가능, 인스턴스 생성하지 않는 static 쓰면 가능
            return (num >= 0) ? "positive" : "negative";
            }
        }

     

    • 클래스 선언
      • 클래스를 일반변수로 선언한 경우, 선언함과 동시에 생성자 호출되고, 일반변수로 선언한 곳에서 함수가 종료되면 소멸자 호출
      • 클래스를 포인터 변수로 선언한 경우, new 키워드를 이용해 선언함과 동시에 생성자가 호출되고, delete 키워드를 이용해 해당 변수의 저장 공간을 삭제하면 소멸자가 호출

     

    • 생성자 개념
      • 해당 클래스의 객체가 생성될 때 자동으로 호출되는 특수한 종류의 메서드
      • 일반적으로 클래스의 멤버 변수를 초기화하거나 클래스를 사용하는데 설정이 필요할 경우 사용
        class 클래스명:
            def __init__(self, 변수명):
                명령어;

     

    • 소멸자 개념
      • 객체의 수명이 끝났을 때 객체를 제거하기 위한 목적으로 사용되는 메서드
      • 일반적으로 클래스의 멤버 변수를 제거하거나 클래스를 사용하는데 설정이 필요할 경우 사용
        public class 클래스명 {
            public void finalize(매개변수) {
                명령어;
            }
        }
        class 클래스명:
            def __del__(self):
                명령어;

     

    • C++ 소멸자 예시
        #include <iostream>
        using namespace std;
        class A {
        public:
            A() {
                cout << "생성자1" << endl;
            };
    
            A(int a) {
                cout << "생성자2" << endl;
            };
    
            ~A() {
                cout << "소멸자" << endl;
            };
    
            void fn() {
                cout << "일반함수"" << endl;
            }
        };
    
        void main() {
            A* a = new A(5);        // 생성자2
            a->fn();                // 일반함수
            delete a;               // delete 하면 소멸자 호출, 소멸자
        } 

     

    • C++ 에서 생성자란? => 객체가 생성될 때 자동으로 호출되는 메서드

     

    • 상속 개념 : 어떤 객체가 있을 때 그 객체의 변수와 메서드를 다른 객체가 물려받는 기능

     

    • 상속 문법
        // C++
        class 부모 클래스명 {
        };
        class 자식 클래스명 : public 부모 클래스명 {
        };
    
        // 자바
        class 부모 클래스명 {
        }
        class 자식 클래스명 extends 부모 클래스명 {
        }
    
        // 파이썬
        class 부모 클래스명:
        ...
        class 자식 클래스(부모 클래스명):
        ...

     

    • 오버로딩 : 동일 이름의 메서드를 매개변수만 다르게 하여 여러 개 정의할 수 있는 기능

     

    • 오버로딩 특징
      • 메서드 이름이 동일
      • 매개변수 개수가 다름
      • 매개변수 개수가 같을 경우 데이터 타입이 달라야 함
      • 반환형은 같거나 달라도 됨

     

    • 오버라이딩 : 하위 클래스에서 상위 클래스 메서드를 재정의할 수 있는 기능

     

    • 오버라이딩 특징
      • 오버라이드하고자 하는 메서드가 상위 클래스에 존재하여야 함
      • 메서드 이름이 동일
      • 메서드 매개변수 개수, 데이터 타입이 동일
      • 메서드 반환형이 동일

     

    • 상위 클래스 접근 개념 : C++은 콜론 두번(::), 자바와 파이썬은 super 키워드를 이용하여 상위 클래스의 변수나 메서드에 접근
        // C++
        부모 클래스::메서드명()
    
        // 자바
        super.메서드명()
    
        // 파이썬
        super().메서드명()

     

    • 추상 클래스 : 미 구현 추상 메서드를 한 개 이상 가지며, 자식 클래스에서 해당 추상 메서드를 반드시 구현하도록 강제하는 기능
        // C++
        class 클래스명 {
        public:
            virtual 데이터 타입 메서드명()=0;
        };
    
        // 자바
        abstract class 클래스명 {
            abstract 데이터 타입 메서드명();
        }
    
        // 파이썬
        class 클래스명:
            def 메서드명(self):
            pass

     

    • 인터페이스 : 자바의 다형성을 극대화하여 개발코드 수정을 줄이고 프로그램 유지보수성을 높이기 위한 문법

     

    • 인터페이스 문법
        interface 클래스명 {
            데이터 타입 메서드명();
        }

     

    • 개발 편의성에 따른 언어 분류
      • 저급 언어 : 기계가 이해하기 쉬운 언어
      • 고급 언어 : 인간이 이해하기 쉬운 언어

     

    • 실행 방식에 따른 언어 분류
      • 명령형 언어 : (= 절차형 언어)
      • 객체지향 언어 : 객체 중심 언어
      • 함수형 언어 : 함수 중심 언어, 수식 함수
      • 논리형 언어 : 논리식 이용

     

    • 구현 기법에 따른 언어 분류
      • 컴파일 방식 : 컴파일러를 통해 실행하는 방식
      • 인터프리터 방식 : 한 줄 읽어가며 해석하는 방식
      • 혼합형 방식 : 컴파일 + 인터프리터 방식

     

    • 절차적 프로그래밍 언어 개념 : 프로시저 호출의 개념을 바탕으로 하고 있는 프로그램밍 언어(= 명령형 언어프로그래밍 언어)

     

    • 절차적 프로그래밍 언어 종류
    알골 알고리즘의 연구개발에 이용, 절차형 언어로는 최초로 재귀 호출 가능, 이후 언어 발전에 큰 영향
    C언어 유닉스 운영 체제에서 사용하기 위해 개발한 프로그래밍 언어, 모든 컴퓨터 시스템에서 사용할 수 있도록 설계된 프로그래밍 언어
    포트란 과학계산에서 필수적인 벡터, 행렬 계산 등이 내장되어 있는 과학 기술 전문 언어, 다양한 수학 함수들 사용가능

     

    • 객체지향 프로그래밍 언어 개념 : 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위인 객체 중심의 프로그래밍 언어

     

    • 객체 프로그래밍 언어 종류
    C++ C 문법에 객체지향 프로그래밍 개념과 일반화 프로그래밍을 위한 템플릿 기능 추가, 성능 하락이 없는 형태 개발 가능, 메모리 관리 등 신경쓸게 많아 개발 어려움
    C# C++와 자바 문법과 비슷한 문법, C#은 자바와 달리 불안전 코드(Unsafe Code)와 같은 기술을 통해 플랫폼 간 상호 운용성 확보
    자바 웹 애플리케이션 개발에 가장 많이 사용, 자바 컴파일러는 자바 언어로 작성된 프로그램을 바이트 코드라는 특수한 바이너리 형태로 변환
    델파이 파스칼 문법에 여러 기능들 추가, windows 아래 모든 부분을 프로그래밍 할 수 있는 언어, 높은 생산성과 간결한 코드가 대표적

     

    • 스크립트 언어 개념 : 소스 코드를 컴파일 하지 않고도 실행할 수 있는 프로그래밍 언어

     

    • 스크립트 언어 종류
    php 동적 웹 페이지를 만들기 위해 설계, php로 작성된 코드를 HTML에 입력 시 웹 서버에서 해당 코드를 인식하여 작성자가 원하는 웹페이지 생성, 인터페이스 방식의 자체 인터프리터 제공
    인터프리터 방식의 프로그래밍 언어, 실용성을 모토로 C, 쉡 스크립트(sh) 등 다른 프로그래밍 언어에서 뛰어난 기능 많이 도입
    파이썬 다양한 플랫폼에서 사용 가능, 라이브러리 풍부, 유니코드 문자열을 지원하여 다양한 언어 문자 처리, 들여쓰기를 사용하여 블록을 구분하는 문법 채용, 다른 언어로 쓰인 모듈들을 연결하는 언어
    자바스크립트 객체 기반의 스크립트 프로그래밍 언어, 웹 브라우저 내에서 주요 사용, 다른 응용 프로그램의 내장 객에도 접근할 수 있는 기능 존재, 브라우저마다 지원되는 버전이 상이

     

    • 함수형 언어 종류
    하스켈 패턴 맞춤, 커링, 조건제시법, 등의 기능 존재, 재귀함수나 대수적 자료형도 지원
    LISP 수학 표기법을 나타내기 위한 목적, 트리 자료구조, 가비지 콜렉션, 동적 자료형과 인터프리터와 같은 개념 제시

     

    • 논리형 / 특수 분야 언어 종류
    프롤로그 논리식을 기반으로 객체 간 관계에 관한 문제를 해결하기 위해 사용, 인공지능이나 계산 언어학 분야, 자연언어 처리 분야 사용
    SQL 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터 관리, 데이터베이스 관련 프로그램들이 표준으로 채택

     

    • 객체지향 프로그래밍 구성요소
      • 객체 : 개체, 속성, 메서드로 구성된 클래스의 인스턴스를 의미
      • 클래스 : 객체지향 프로그래밍에서 객체를 표현하는 추상 데이터 타입으로 객체를 생성하는 틀, 클래스를 통해 추상화된 자료형 제공
      • 메시지 : 객체간 통신

     

    • 객체 구성요소
      • 개체 : 현실 세계에 보이는 본질을 의미
      • 속성 : 자료 저장소 역할, 절차 지향 프로그래밍의 변수와 대응
      • 메서드 : 호출 단위를 의미하며, 절차 지향 프로그래밍의 함수와 대응

     

    • 명령형 언어의 개념을 쓰시오 => (명령어들이 절차적으로 실행되는 프로그래밍 방식)
    • 함수형 언어의 개념을 쓰시오 => (LISP 등과 같이 수학적 수식을 함수로 표현하는 프로그래밍 방식)

     

    • 라이브러리 개념 : 효율적인 프로그램 개발을 위해 프로그램을 모아 놓은 집합체

     

    • 라이브러리 구성
      • 도움말 : 라이브러리를 사용할 수 있도록 하는 도움말 문서
      • 설치 파일 : 라이브러리를 적용하기 위해 제공되는 설치 파일
      • 샘플 코드 : 라이브러리를 이해하고 손쉽게 적용하기 위해 제공되는 샘플 소스 코드

     

    • 라이브러리 종류
    표준 라이브러리 프로그래밍 언어가 기본적으로 가지고 있는 라이브러리, 별도의 파일 설치 없이 날짜와 시간 등의 기능 이용가능
    외부 라이브러리 별도의 파일을 설치, 누구나 개발하여 설치할 수 있으며, 인터넷 등을 이용하여 공유할 수 있음

     

    • 문자열 라이브러리 함수 : 문자열 함수를 사용하기 위해서는 string.h 헤더 파을 include 하여 사용
    strcat 문자열끼리 연결하는 함수, strcat(dest, src)
    strcpy 문자열을 복사하는 함수, strcpy(dest, src)
    strcmp 문자열을 비교하는 함수, strcmp(s1, s2)
    strlen 문자열을 길이를 알려주는 함수, strlen(s)

     

    • 문자열 함수 예제
      #include <stdio.h>
      void main() {
        char a[20] = "Hello";
        char b[10] = "Soojebi";
      strcat(a, b);
      printf("%s %s", a, b);    // HelloSoojebi, Soojebi
      }
      #include <stdio.h>
      void main() {
        char a[20] = "Hello";
        char b[10] = "Soojebi";
      strcpy(a, b); 
      printf("%s %s", a, b);    // Soojebi, Soojebi
      #include <stdio.h>
      void main() {
        char a[20] = "Hello";
        char b[10] = "Soojebi";
        int c = strcmp(a, b); 
      printf("%d", c);    // 비교하여 알파벳 사전에 H가 S보다 먼저 나오니까 -1 출력, 반대면 1 출력, 동일하면 0 출력 
      #include <stdio.h>
      void main() {
        char a[20] = "Hello";
        int c = strlen(a); 
      printf("%d", c);   // 5  

     

    • 표준 라이브러리 함수 : 표준 라이브러리 함수를 사용하기 위해서는 stdlib.h 헤더파일을 include 하여 사용
      • atoi : 문자열(str)을 정수(int)형으로 변환하는 함수
      • atof : 문자열(str)을 실수형(float, double)으로 변환하는 함수
      • itoa : 정수(int)형을 문자열(str)로 변환하는 라이브러리 함수

     

    • 수학 라이브러리 함수 : 수학 라이브러리 함수를 사용하기 위해서는 math.h 헤더 파일을 include 하여 사용
      • ceil : 소수점 올림 함수
      • floor : 소수점 내림 함수
      #include <stdio.h>
      void main() {
        double a = 1.1;
        double b = ceil(a);
        printf("%f", b);    // 2.000000

     

    • 필기 기출
      #include <stdio.h>
      #icnlude <string.h>
    
      void main() {
        char str[50] = "nation";
        char *p2 = "alter";
        strcat(str, p2);
        printf("%s", str);    // nationalter
      }

     

    • 모듈 / 패키지
      • 라이브러리 = 모듈 + 패키지
      • 모듈 : 전역변수, 함수 등을 모아둔 파일
      • 패키지 : 모듈을 디렉토리 형식으로 구조화한 라이브러리

    댓글

Designed by Tistory.