카테고리 없음

21년도 하계방학_ 29기 기수스터디 1주차

토끼곰 2021. 7. 7. 20:18

<1학기 C++ 스터디 2, 3, 4 주차 복습 문서화> 

 

 

1)  2주차 내용 

 

> 조건문

 - if 문: " if (조건식) 실행할 문장; " , 여러 줄 사용 시 { } 로 묶어주기 

- if ~ else 문: if (조건식) {참일 때 실행할 명령} else {거짓일 때 실행할 명령}

- 다중 if ~ else 문: if (조건식) {조건식 1이 참일 때 실행할 명령}

                        else if {조건식 2가 참일 때 실행할 명령} 

                        else {둘 다 거짓일 때 실행할 명령}

- 중첩 if 문: 조건을 3개 이상 사용할 때 사용, 말 그대로 중첩해서 사용하는 것 

- switch ~ case 문: 다중 if문과 같은 용도로 쓰임. but 정수식에 따라 분기. 

                         " switch( ) { case1: 실행할 명령; break; 

                                        case2: 실행할 명령; break; } "  

 

> 반복문  

- for 문: " for (초기값; 조건식; 증감식;) {반복할 명령들;} " , 지정된 횟수 만큼 반복. 

- 중첨 for 문: " for (초기값1; 조건식1; 증감식1) 

                   { for (초기값2; 조건식2; 증감식2) {반복할 명령들} } "  

- while 문: " while (조건식) {반복할 명령들} ", 조건을 만족하는 동안 명령을 반복.

- do ~ while 문: " do {반복할 명령들;} while (조건식); ", while 문과 달리 거짓이어도 명령이 한번은 실행됨. 

 

> 제어문 

- break: 반복문의 제어를 벗어날 수 있음. 

- continue: 반복문의 처음으로 돌아감. (switch 문에서 사용 X) 

- goto: 지정된 위치로 이동, "goto 레이블명; 

                                     goto문 레이블: 실행할 코드; "

- return 문: 현재 실행중인 함수 종료. " return 0; "

 

> 배열

- 동일 타입의 데이터들을 보다 편리하게 한번에 다루기 위해서 사용 

- 선언: " 자료형 배열명 [원소의 개수]; ", 인덱스는 항상 0부터 시작. 

- 크기선언 시 null 값과 함께 생각해서 +1 하기 

- 문자 하나 선언 시 ' ' , 문자열 선언 시 " " 

- 2차원 배열: " 타입 배열이름 [행의 길이][열의 길이]; " 

                   

> 포인터 

- 실행 중인 메모리의 주소값. 즉 포인터 변수에는 변수의 주소값이 할당됨.

- 포인터 선언: 변수 앞에 * 을 붙여준다. ex) int * ptr; 

- 포인터 초기화: ex) int *ptr = &k; 

- 배열과 포인터: 배열의 이름 = 배열 메모리 시작 주소. 

 

 

2) 3주차 내용 

 

> 함수 

- 특정 기능을 반복해야 할때, 효율적으로 처리하기 위해서 이용함. 

- main 함수: 프로그램의 시작이자 끝, main 함수에 의해서 라이브러리 함수와 사용자 정의 함수 호출. 

- 구현 방법: " 반환자료형 함수이름 (매개변수 목록) {실행할 코드; retrun 반환값;} "

- 선언과 동시에 구현할수도, 선언부&구현부 나눌 수도 있음.

- 전역변수: 프로그램 전체에서 사용되는 변수 (함수 밖 정의)

  지역변수: 한정된 지역에서만 사용되는 변수 (함수 내 정의)

- swap 함수 (call by value): 두 매개변수를 넣었을 때,  swap 함수 내에서는 값이 교환되더라도 main 에서는 교환 X

                                    값을 넘겨받아 활용하는 것 뿐.

 

> 포인터 

- 포인터 변수에 자료형 선언 이유: 여기에서 자료형이 몇 바이트를 읽을지 결정하기 때문. 

- int형: 4바이트/ char형: 1바이트/ double형: 8바이트 

- 포인터 변수: 메모리 내의 특정 주소를 저장하는 변수, 자체의 크기는 4바이트로 동일함

- 용어정리: ex) int *p; p= &n; 의 경우 (n은 메모리 공간의 이름)

                   &n, p : n 의 주소값/ *p : n 이 저장한 값 

- 포인터 변수가 배열을 가리킬 경우 주소 저장 방법: 

               int *p =NULL; 다음에 p = n; 또는 p = &n[0]; (n은 배열이름) 

              모두 배열의 첫번째 원소의 주소를 저장하는 방법

             + 배열에선 데이터형의 크기만큼 각 원소가 메모리를 차지한다.

- swap 함수 (call by address): 포인터 변수를 이용하는 경우 main 함수의 지역변수에 대해 제어권을 가지기 때문에, 

                                       swap 함수 내부의 변수가 교환되면서 동시에 main 내부의 변수값도 교환됨.

        

> 참조 

- 참조란, 이미 존재하는 변수에 대한 별명, "int &ref = n; " -> ref 가 n의 참조자 

- 새로운 공간을 할당받지 않음. 

- swap 함수 (call by reference): call by address 와 유사하게 이 역시 별명을 통해 main의 지역변수 제어 가능.

                                         swap 함수 내부의 변수가 교환되면서 동시에 main 내부의 변수값도 교환됨.

- 포인터와 참조의 차이: 1. 참조자는 단독으로 존재할 수 없기에 선언과 동시에 초기화 필요 

                               2. 별명이기 때문에 차후 변경 불가능 

                               3. 포인터는 예를 들어 배열의 경우 다른 메모리 주소값에도 접근 가능, but 참조자는 불가능 

 

 

3) 4주차 내용 

 

> 객체와 클래스 

- 클래스: 객체를 정의하는 틀이자 설계도. 실체 X

- 객체: 클래스의 모양을 그대로 가지고 탄생하는 실체

         하나의 클래스에서 여러 개의 객체 생성 가능 

 

- 클래스 선언부:

* class 키워드 이용해서 클래스 모양 선언, 멤버 변수 및 함수 선언, 멤버에 대한 접근 권한 지정 

ex) class Circle {public: int radius; 

                              double getarea(); }; 

여기서 class= class 키워드/ Circle = 클래스 이름/ public = 접근 지정자/ radius, getarea() = 멤버 변수&함수

+접근 지정자 종류 

private: 디폴트, 외부 접근 X

protected: 자식 클래스 접근 O

public: 모든 클래스 접근 O

 

- 클래스 구현부: 

ex) double Circle:: getarea(){ return 3.14*radius*radius;} 

여기서 double = 함수 리턴 타입

 

-> 선언부와 구현부를 나누는 이유는 클래스의 재사용을 위함임.

 

- 객체 생성: " 클래스이름 객체이름; " 으로 생성 

                멤버변수 접근 시 " 객체이름.멤버변수 = 변수; "

                멤버함수 호출 시 " 변수 = 객체이름.함수이름; "

 

> 생성자 

- 생성자란 객체가 생성되는 시점에서 자동으로 호출되는 멤버함수 

- 특징: 객체 생성 시점에 오직 한번만 실행 

         생성자 함수의 이름= 클래스 이름 

         리턴 타입 및 void 선언하지 X

         기본 생성자는 자동으로 생성

         생성자 중복 가능 

- 위임생성자: 생성자가 다른 생성자 호출하는 것이며 코드 간소화를 위한 것 

                  타겟 생성자: 객체 초기화 전담, 위임 생성자: 타겟 생성자를 호출하는 생성자 

ex) Circle::Circle() : Circle(1) { } <- 위임 생성자에 해당 

     Circle::Circle(int r){ ~ }  <- 타겟 생성자에 해당 

 

- 기본 생성자: 디폴트 생성자, 클래스에 생성자는 반드시 있어야 하므로 생성자 X 시 자동으로 생성해줌. 

 

> 소멸자 

- 객체 소멸 시점에 자동으로 호출되는 클래스의 멤버함수 

- 오직 한번만 자동 호출(임의호출 X), 메모리 소멸 직전 호출됨

- 선언 및 구현: ~ Circle(); / Circle::~Circle(){ ~ } 

- 특징: 동적으로 할당받은 메모리 반환 등의 마무리 작업을 위해 사용 

         리턴타입 및 매개변수 없음, 중복 선언 불가능함

         선언되어 있지 않으면 기본 소멸자 자동 생성

 

- 지역 객체: 함수 내에서 선언된 객체, 함수 종료 시 소멸

- 전역 객체: 함수 바깥에서 선언된 객체, 프로그램 종료 시 소멸 

 

* 객체 소멸 순서는 생성 순서의 역순이다. 

 

>접근 지정 

- 객체 보호 및 보안을 위해 사용 

- 종류 세 가지는 위에서 (초록 글씨) 한번 정리함.

- 특징: 접근 지정자는 여러번 사용 가능

         기본 원칙은 비공개, 멤버 변수는 private 으로 지정하는 게 바람직하다. 

 

> inline 함수 

- 오버헤드: 실행 도중 동떨어진 위치에 코드를 실행할 경우 추가적으로 시간, 메모리, 자원이 사용되는 현상

- 실행 속도 저하를 위해 도입된 기능, 함수 앞에 inline 키워드 붙여서 선언 

- but 컴파일러의 판단에 따라 불필요하면 무시됨. 

- 자동 inline 함수: inline 선언이 없어도 자동으로 인라인함수 처리될 수 있음.