본문 바로가기
공부/정보처리기사

[10] 프로그래밍 언어 활용 ,포인터, 오버로딩, 오버라이딩

by Lagooni 2021. 10. 6.

포인터(Pointer)

  • 변수의 주솟값을 저장하는 공간이다.
  • int a = 10;
    int*b = &a;
    
    //*b는 데이터가 들어갈 공간
    //&a는 주솟값
  • 데이터 타입 뒤에 *를 붙이면 주소를 저장하는 포인터 변수라는 의미이고, 일반 변수명에 &를 붙이면 해당 변수명의 주소값이다.
  • 주소에 해당하는 값을 가리킬 때에는 *를 사용한다.
  • int a = 10;
    int* b = &a;
    
    printf("%d %d", a, *b);	//b가 가리키는(*) 값은 a이므로 *b == a이다
    //&a는 주솟값
  • 포인터 선언시 *의 위치는 관계 없음(int*a, int *a, int * a)

자바 자료형

  • HashSet: 중복된 원소를 허용하지 않는 집합(Set)의 성질을 가진 클래스; 순서가 중요하지 않음
  • ArrayList: 크기가 가변적으로 변하는 선형리스트의 성질을 가진 클래스; 순서가 중요함, 인덱스를 통해 접근 가능
  • LinkedList: 데이터를 저장하는 노드가 이전 노드와 다음 노드의 상태를 알고 있는 링크드 리스트 자료구조를 구현한 클래스
  • HashMap: 키와 값으로 구성된 객체를 저장하는 구조로 되어 있는 자료구조를 구현한 클래스

파이썬 자료형

  • 세트형: 중복된 원소를 허용하지 않는 집합의 성질을 가지고 있는 자료구조
  • 리스트형: 크기가 가변적으로 변하는 선형리스트의 성질을 가지고 있는 자료구조
  • 튜플형: 초기에 선언된 값에서 값을 생성, 삭제, 수정이 불가능한 형태의 자료구조
  • 딕셔너리형: 키와 값으로 구성된 객체를 저장하는 구조로 되어 있는 자료구조

식별자: 변수, 상수, 함수 등 서로 구분하기 위해 사용되는 이름이다. 프로그램의 구성요소를 구별하기 위해 사용한다.

식별자 표기법

  • 카멜 표기법(Camel Case): 식별자 표기 시에 여러 단어가 이어지면 첫 단어 시작만 소문자로 표시하고 각 단어의 첫 글자는 대문자로 지정하는 표기법 (예: inputFormat)
  • 파스칼 표기법(Pascal Case): 식별자 표기 시에 여러 단어가 이어지면 각 단어의 첫 글자는 대문자로 지정하는 표기법(예: Input Format)
  • 스네이크 표기법(Snake Case): 식별자 표기시에 여러 단어가 이어지면 단어 사이에 언더바를 넣는 표기법(예: input_format)
  • 헝가리안 표기법(Hungarian Case): 식별자 표기 시 두어에 자료형을 붙이는 표기법; int형일 경우 n, char형일 경우 c, 문자열일 경우 sz를 붙임(예: nScore  -> 정수형)

클래스: 객체지향 프로그래밍(OOP; Object-Oriented Programming)에서 특정 객체를 생성하기 위해 변수와 메서드를 정의하는 틀이다.

접근 제어자(Access Modifier)

  • Public: 외부의 모든 클래스에서 접근이 가능한 접근 제어자
  • Protected: 같은 패키지 내부에 있는 클래스, 하위 클래스에서 접근이 가능한 접근 제어자
  • Default: 접근제어자를 명시하지 않은 경우로 같은 패키지 내부에 있는 클래스에서 접근이 가능한 접근 제어자; 자바에만 존재함.
  • Private: 같은 클래스 내에서만 접근이 가능한 접근 제어자

오버로딩(Overloading)

  • 오버로딩은 동일 이름의 메서드를 매개변수만 다르게 하여 여러 개 정의할 수있는 기능이다.
  • 파이썬은 오버로딩 기능을 지원하지 않는다
    • 오버로딩 특징
      • 메서드 이름은 같아야 함
      • 매개변수 개수가 달라야 함
      • 매개변수 개수가 같다면 데이터 타입이 달라야 함
      • 반환형을 같거나 달라도 된다.

오버라이딩(Overriding)

  • 오버라이딩은 하위 클래스에서 상위 클래스 메서드를 재정의할 수 있는 기능이다.
  • C++에서는 virtual 키워드가 있어야 오버라이딩 가능(부모 클래스나 자식 클래스의 메서드 둘 중 하나라도 virtual키워드가 있다면 오버라이딩 되지만 둘 다 없다면 오버라이딩 되지 않음!)
    • 오버라이딩 특징
      • 오버라이드하고자 하는 메서드가 상위 클래스에 존재해야 한다.
      • 메서드 이름은 같아야 함
      • 메서드 매개변수, 개수, 데이터 타입이 같아야 함.
      • 메서드 반환형이 같아야 한다.

개발 편의성에 따른 언어 분류

  • 저급언어: 기계가 이해할 수 있도록 만들어진 언어
    • 예) 기계어, 어셈블리어
  • 고급언어: 개발자가 소스 코드를 작성할 때 쉽게 이해할 수 있도록 작성된 언어
    • 예: C, C++, JAVA, PYTHON

실행하는 방식에 따른 언어 분류

  • 명령형 언어(절차형 언어): 컴퓨터에 저장된 명령어들이 순차적으로 실행되는 프로그래밍 방식
    • 예: FORTRAN, COBOL, PASCAL, C
  • 객체 지향 언어: 객체 간의 메시지 통신을 이용하여 프로그래밍하는 방식
    • 예: JAVA, C++
  • 함수형 언어: 수학적 수식과 같은 함수들로 프로그램을 구성하여 호출하는 방식
    • 예: LISP
  • 논리형 언어: 논리 문장을 이용하여 프로그램을 표현하고 계산을 수행하는 개념에 기반한 프로그래밍 방식
    • 예: 프롤로그

구현 기법에 따른 분류

  • 컴파일 방식의 언어: 고급 언어를 기계어로 번역하는 방식의 언어; 컴파일러에 의해 실행에 필요한 정보가 미리 계산되어 실행 속도가 높음
    • 예: FORTRAM, PASCAL, C, C++
  • 인터프리터 방식의 언어: 고급 언어 명령문을 하나씩 번역하고 실행하는 방식의 언어; 프로그램 실행과 동시에 동작
    • 예: BASIC, 프롤로그, LISP
  • 혼합형 방식의언어: 고급 언어를 컴파일하여 중간 언어로 변환 후, 인터프리터에 의해 번역을 실행하는 방식의 언어
    • 예: JAVA

절차적 프로그래밍 언어 종류

종류 설명
알골(ALGOL) 알고리즘의 연구 개발에 이용하기 위한 목적으로 생성
절차형 언어로는 최초로 재귀호출이 가능 
이후 언어의 발전에 큰 영향을 미침
C언어 유닉스 운영 체제에서 사용하기 위해 개발한 프로그래밍 언어
모든 컴퓨터 시스템에서 사용할 수 있도록 설계된 프로그래밍 언어
베이직(BASIC) 교육용으로 개발되어 언어의 문법이 쉬움
다양한 종류의 베이직이 존재
서로 다른 종류 사이의 소스코드는 호환되지 않음
포트란(FORTRAN) 과학계산에서 필수적인 벡터, 행렬 계산 기능 등이 내장된 과학 기술 전문 언어
산술기호, 삼각함수, 지수함수, 대수 함수 등과 같은 수학 함수들 사용 가능

객체지향 프로그래밍 언어 종류

종류 설명
C++ C++은 C문법에 객체지향 프로그래밍 개념과 일반화 프로그래밍을 위한 템플릿 기능이 추가
C++개발자는 원하는 많은 작업을 성늘 하락이 없는 형태로 개발이 가능
직접 신경써야 하는 것들이 많은 언어이기 때문에 개발이 어려움
C# 마이크로소프트에서 개발한 객체지향 프로그래밍 언어
C++과 자바의 문법과 비슷한 문법을 가지고 있음
자바(JAVA) 썬 마이크로 시스템즈가 개발한 객체지향적 프로그래밍 언어
현재 웹 애플리케이션 개발에 가장 많이 사용하는 언어
자바 컴파일러는 자바 언어로 작성된 프로그램을 바이트 코드라는 특수한 바이너리 형태로 변환
델파이(Delphi) 기본적인 문법은 파스칼 문법에 여러 기능이 추가되어 존재
델파이는 윈도우즈(Windows)아래에서 모든 부분을 프로그래밍 할 수 있는 언어
높은 생산성과 간결한 코드가 대표적인 장점이고, C++와 비슷한 수준의 저수준 시스템 프로그래밍도 가능

스크립트 언어 종류

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

선언형 언어 종류

구분 종류 설명
함수형 언어 하스켈(Haskell) 패턴 맞춤, 커링, 조건제시법, 가드, 연산자 정의 등의 기능이 존재
재귀함수나 대수적 자료형도 지원
리스프(LISP) 수학 표기법을 나타내기 위한 목적으로 생성
논리형 언어 프롤로그(Prolog) 논리식을 기반으로 객체 간의 관계에 관한 문제를 해결하기 위해 사용
인공지능이나 계산 언어학 분야, 자연어 처리 분야에서 사용
특수 분야 언어 SQL 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어
데이터베이스 관련 프로그램들이 SQL을 표준으로 채택

객체지향 프로그래밍 구성요소 (객/클/메)

  • 객체(Object): 개체, 속성, 메서드로 구성된 클래스의 인스턴스를 의미
  • 클래스(Class): 객체지향 프로그래밍에서 객체를 표현하는 추상 데이터 타입으로 객체를 생성하는 틀
  • 메시지(Message): 객체 간의 통신

객체(Object)의 구성요소 (개/속/메)

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

라이브러리(Library): 라이브러리는 필요할 때 찾아서 쓸 수 있도록 모듈화되어 제공되는 프로그램이다; 효율적인 프로그램 개발을 위해 필요한 프로그램을 모아 놓은 집합체로서, 프로그래밍 언어에 따라 일반적으로 도움말, 설치파일, 샘플 코드 등을 제공한다.

라이브러리의 구성 (도/설/샘)

  • 도움말: 라이브러리를 사용하는데 이해하기 쉽도록 설명해 놓은 문서
  • 설치 파일: 라이브러리를 적용하기 위해 제공되는 파일
  • 샘플 코드: 개발자가 라이브러리를 이해하고 손쉽게 적용하기 위해 제공되는 소스코드

라이브러리 종류

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

라이브러리는 모듈과 패키지를 총칭한다. 모듈이 개별 파일이라면 패키지는 파일들을 모아놓은 폴더라고 볼 수 있음.

구성 설명 예시
모듈(Module) 전역변수, 함수 등을 모아둔 파일 import 모듈명
패키지(Package) 모듈을 디렉터리 형식으로 구조화한 라이브러리 import 패키지명.모듈명

 

댓글