📌 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++, 자바에서 사용하며 클래스 내부의 변수와 함수를 가리킬 수 있음
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 메서드 개념
- 클래스가 메모리에 올라갈 때 자동적으로 생성되는 메서드
- 인스턴스를 생성하지 않아도 호출이 가능하게 됨
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):
명령어;
#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
}
- 모듈 / 패키지
라이브러리
= 모듈 + 패키지
모듈
: 전역변수, 함수 등을 모아둔 파일
패키지
: 모듈을 디렉토리 형식으로 구조화한 라이브러리