Object Oriented Design(OOD)
객체 지향 프로그래밍과 디자인을 배우게 된다.
디자인 패턴. 조금 더 넓은 범위의 알고리즘. 어떻게 효율적으로 프로그래밍을 할 수 있는가. 효율이란 시간,공간 복잡도 뿐만 아닌 예술적으로 어떻게 예쁘고 간결하게 잘 짤 수 있는지 학습하게 된다.
이론 2시간, 실습 2시간 Per Week. 02분반. 이론 화요일, 실습 수요일.
- 프로그래밍 간단하게 짤 수 있어야 하며,
- C 언어를 잘 하면 좋다.
- 모든 실습은 리눅스 및 유닉스 환경에서 사용하게 된다.
카카오톡 오픈 채팅방을 이용. 학번+이름. 모든 공지는 오픈채팅방에서.
매 주 숙제가 나간다. 출석 10퍼, 과제 10퍼, 중간 기말 각각 30퍼.
5분부터 지각. 얼마나 늦어도 일단 수업 참석했으면 지각 처리.
실습 시간 문제가 숙제가 된다. 과제 10점 만점.
프로그램이 잘 되는지. 예쁘게 짰는지.
중간.
10월 25일 수요일. 19:00~20:30
기말.
12월 13일 수요일. 시간 동일.
컴파일러는 GCC가 아닌 clang을 이용할 것임.
변수 이름, 공백, 들여쓰기 등등 어떻게 C++ 스타일 가이드를 짜는 게 좋을지 잘 찾아보기.
커맨드라인, 콘솔, 쉘. ... 아무튼. 그냥 터미널 창이다.
Hello World!
ls, mkdir, cd.
#include <iostream>
int main() {
std::cout << "Hello World!" << std::endl;
return 0;
}
#include는 헤더파일을 찾아서 복사 붙여넣기를 한다.
cout이 프린트하는 구문이다. std라는 코드 묶음, 영역(네임스페이스)
endl은 줄바꿈.
return 0; 정상적으로 끝났으면 0으로 반환.
vim을 이용해도 좋다.
확장자를 두가지. .cc나 .cpp가 있다. 둘다 같다. 윈도우 스타일 .cpp/ .cc는 리눅스 환경에서 사용한다.
우리는 .cc로 하기로 하자.
clang++ [소스파일] -o [목적 파일]
clang++ helloworld.cc -o hello
./hello
.은 여기 디렉토리를 의미.
이 수업은 c++17로 이루어진다.
clang++ -std=c++17 helloworld.cc -o hello
는 c++17 버전의 컴파일을 하는 명령어. (과제를 할 때 항상 이 옵션을 줘야 한다.)
컴파일 할 때마다 계속 이렇게 써야하는가?
아니다.
build script를 짜두자. 컴파일 규칙을 써두는 것. Makefile을 이용해서 한다.
all: helloworld.cc
clang++ -std=c++17 helloworld.cc -o hello
all은 타겟(target). 이 규칙의 이름은 all, 파일 이름이 all이다.
prerequisites(프리리퀴짓)이 사전에 있어야 하는 것. 다른 규칙의 이름이 프리리퀴짓일 수도 있다. 현 디렉토리에 프리리퀴짓이 있어야 실행할 수 있다. 여기서는 helloworld.cc
레시피가 수행할 명령어.
터미널에서 make를 치면, make파일에 제일 위에 있는 명령어를 수행함. 여기서는 make all과 동일하게 작동함.
터미널에서 rm을 하면 휴지통이 아니라 파일이 영구 삭제 된다.
make에서 만든 파일 이름:타겟이 현 디렉토리에 있으면 실행이 안 된다. 규칙이름일 뿐이니까 .PHONY [타겟]을 하면 명시적으로 파일이 아니라는 것을 알려줌. 타겟과 같은 이름의 파일이 현 디렉토리에 있어도 make가 잘 수행된다.
컴파일한 파일을 잘 지우는 것도 중요하다. clean이라는 명령어를 만들자.
clean:
rm -f hello
-f는 강제로. 저 옵션이 있으면 hello라는 이름의 파일이 없더라도 경고 메세지나 에러를 일으키지 않고 그냥 넘어감.
all: hello
hello: helloworld.cc
clang++ -std=c++17 $^ -o $@
clean:
rm -f hello
.PHONY all clean
$^은 hello $@는 helloworld.cc를 의미.
포니에 hello를 안 넣은 이유는 진짜 파일이 맞기 때문이다.
Programming language
Compilation(번역)
프로그램을 기계가 인식할 수 있도록 번역. 프로그래머의 실수를 잡아준다. 여러 최적화도 해줌.
타입을 명시하게 하여 보안적으로 안정적으로 할 수도 있다.
'int x= 3; x는 무조건 정수형이 나올 것이다.'
interpretation(해석)
컴퓨터가 인터프리터를 실행시켜서, 내가 사용하는 말로 프로그램을 작동시키도록 함.
한 줄 읽고, 해석하고, 한 줄 읽고, 해석하고. 오류를 잡아주지는 못 하고 최적화도 안 해준다.
jit 컴파일러는 조금 다르다.
Dynamic typed languages.
실행 시점을 의미하는 다이나믹. 실행되기 전에는 타입이 없다. 아예 없는 건 아니고,
var x = 10;을 읽게 되면 x의 타입이 정수로 정해지게 된다.
실행될 때마다 타입이 바뀌게 된다.
var x = 10;
x =11;
x= true; ... 등등
컴파일 랭귀지는 큰 프로그램을 만들 때 좋다.
하드웨어와 가까운 소프트웨어를 만들 때 좋다. 중간에 해석될 여지를 주지 않기 때문이다.
인터프리티드 랭귀지는 작은 프로그램을 만들 때 좋다.
교육할 때도 좋다. 자율성이 좋아 쉽고 빠르게 프로그램을 짤 수 있다.
Paradigm
프로그래밍을 명령형/ 선언형 언어로 크게 나뉠 수 있다. 선언형은 잘 안 쓰인다. 학교에서 배우는 모든 것은 명령형 언어이다.
명세서를 다 작성해주는 명령형 언어. 명령을 구체적으로 하는 것.
선언형은 컴퓨터한테 알고리즘을 기술하지 않고, 현 상황-사실만 알려준다. 지금있는 사실을 통해서 다음 사실을 창출해준다.
또 functional/non-functional로 나뉠 수 있다. 함수 자체가 값으로 쓰이는 것. 함수형 언어. 일반적 정수, 문자가 함수와 구별되지 않는 것이 함수형 언어이다.
Object Oriented와 Non-OOP가 있다.
왜 OOP인가?
프로그램을 나눠서 여러 명이서 구현할 때, 편하다.
절차라는 것이 중요해지지 않아졌다. 클래스/객체라는 것이 중요해졌다. 서로의 상관관계만 맞으면 된다. 상당히 큰 프로그램을 작은 클래스로 나누어서 만들어지기 편해졌다.
encapsulation이 가능. 보안적 측면.
정보 데이터 지키기 좋다. 갑자기 값이 바뀌거나 하지 않도록 한다. 접근하면 안 되는데 접근해버리는 경우가 없어진다.
'[Computer Science] -보호글 > [객체지향설계]' 카테고리의 다른 글
[객체지향설계] 10/03 이론 (0) | 2023.10.23 |
---|---|
[객체지향설계] 10/17 이론 (1) | 2023.10.17 |
[객체지향설계] 09/26 이론 (0) | 2023.09.26 |
[객체지향설계] 9/19 이론 (0) | 2023.09.19 |
[객체지향설계] 9/12(화) 이론 (0) | 2023.09.12 |