More actions
- 2012년 그들이 스터디를 시작한다.
- C/C++/Java 모두 다른 언어지만 하나에서 시작했으니...
일정
- ~~일단 매주 수요일 6시부터~~
- 화요일 오후 3시부터 6시까지
목적
- C/C++/Java 언어를 공부하고 서로간의 사용상 차이점과 공통적인 패턴 학습
- 서로 다른 세 언어를 마치 한언어처럼 쓸수 있게끔..
- 초심자 대환영
활동
2013년 1월 2일
프로그래밍 언어의 필수 요소
- 제어문, 반복문, 변수, I/O
- I/O는 콘솔 뿐만아니라 다른 어떤것이 될수 있다.
- 케빈 미트닉은 모니터가 없어서 잡혔다.
c++의 "hello world" 프로그램을 뜯어보자
#include <iostream>
using namespace std;
int main(){
cout<<"hello!"<<endl;
return 0;
}
- #이 붙어있는 명령어 - Preprocessor가 처리
- #include, #define, #ifndef 등...
- 나중에 배우겠지만 이건 안쓸수록 좋음 - 안혁준
- 왜? 컴파일러는 이런거 모르기 때문.
- namespace : 이름 중복을 막기 위해 사용
- using namespace NAME; -> NAME의 namespace를 해당 scope 안에서 이용하겠다는 것
- std
- 기본 함수들의 namespace
- using
- 지금부터 어떤 특정 네임스페이스를 쓰겠다는 지시어.
- 문자열
- char의 배열
- 자바에서는 아닌것 처럼 보여도 사실 내부적으로는 비슷하다.
- string Class
- endl
- 라인끝 문자를 출력하고 버퍼를 비운다.
- return 0;
- UNIX/LINUX 계열에서는 중요한 정보
- 이걸로 프로그램이 제대로 끝났는지 판단한다.
- return에는 중요한 특성이 있는데 이게 호출되면 지역변수를 정리한다.
- main 함수의 리턴값
변수
- 정의 - 어떤 값을 담을수 있는것.
- C/C++/JAVA은 형을 강제하는 강형언어기 때문에 형이 있다.
- 당연히 강형언어가 더 빠르게 동작할수 있다. CPU에서 어떤 모듈을 쓰는지 알기 때문.
- 정수
- int, long, long long, short, char
- int크기는 CPU가 한번에 처리할수 있는 정수 - 당연히 16bit에서는 다를수 있다.
- long long 같은 경우에는 없을수도 있다.
- 실수
- float, double
- float가 float인 이유 - 부동 소수점이라서....
- double 은 그냥 double float라서..
- bool
- 1bit 짜리.
- C는 bool이 없다!, c++은 있다. java는 boolean으로 사용한다. - C11은 있단다.
- 대부분의 경우 그냥 정수로 처리한다.
- 값이 0이면 false 그외는 true
- c++에서도 0은 false로, 그외는 true로 간주된다. while(1) {}, while(true) {} 둘 다 가능
- java에서는 int와 boolean은 호환되지 않는다. while(1) {}는 컴파일에러.
제어문, 반복문
- 제어문과 반복문은 어찌보면 동치.
- switch case문에서 case는 컴파일러만 알뿐(Label이라는 소리..)
- 세 언어에서 case문 뒤는 "정수" 이다.
- ASCII에 속지마라.
- java7부터 문자열상수 case label 지원. case "hello": ...; 가 된다.
2013년 1월 9일
포인터 (Pointer)
- void pointer 사용 자제합시다. void pointer가 가리키는 값의 타입을 추론할 수 없다. 참고
함수 (Function)
- function이란 input과 output이 있는 기능 단위
- 함수에 parameter 를 넘겨주지 않거나 return 이 없는 함수도 있음.
- 많은 기능을 잘게 쪼개기 위해 함수를 사용한다.
- 가독성을 좋게 한다.
- 코드의 재사용성을 높인다.
- global variable의 사용을 자제하자. 함수의 기능을 이해하기 어렵게 만든다.
- 변수 접근을 제어하기 힘들기 때문에 버그를 유발할 확률도 증가한다.
- 파라메터 전달 방식
- call by value
- call by pointer
- call by reference(alias)
- C/C++/Java의 parameter는 call-by-value 형식으로 값을 전달한다.
- 포인터 값을 전달하는 Call-by-reference의 경우는, 포인터 값을 복사의 방식으로 전달하게 되므로, 일종의 call-by-value라고 볼 수 있다.
- 참조는 내부적으로 포인터를 이용한다.
- C/C++의 함수 호출 방법(Calling Convention)
- __stdcall, __thiscall, __pascal, __syscall 등
- 인자의 전달 방식과 stack의 해제 방법의 차이
- 함수 decorator : C++의 오버로딩을 하게 되면, 컴파일 타임에서 각각의 함수를 구분할 수 있도록 붙는 머릿말
- extern "C"를 이용하면 이러한 함수 decorator가 없어진다.
- extern "c"의 의미?
- c++11(아마도?) Working Draft의 7.5절 linkage specification 참고
2013년 1월 16일
Thread
- mutex, semaphore, spinlock, critical section, race condition, dead lock
- event driven, event loop, thread polling, busy waiting,
- java ForkJoin
Template
다음주 예고?
- STL