C++

[강의] 8월 13일 수업정리

k-codestudy 2024. 8. 13. 19:43

저번 수업의 복기 내용

  1. 프로그래밍의 본질
    • 프로그래밍은 결과가 정해져 있는 상황에서 그 결과를 어떻게 구현할지 고민하고, 이를 코드로 표현하는 과정입니다.
  2. 클래스 코딩의 핵심
    • Class 코딩에서 중요한 것은 사용자가 객체의 변수에 직접 명령을 내리는 것이 아니라, 객체가 제공하는 기능(메서드) 중 무엇을 사용할지 선택하는 것입니다. 이는 '물건을 사용한다'는 개념으로 이해할 수 있습니다.
    • 내 객체가 구체적으로 무엇을 하는지 알 필요가 없다는 관점이 핵심입니다. 

프로그램에서 객체의 사용 순서

  1. 객체 사용의 흐름
    • 객체 사용 시 정해진 흐름이 있습니다: [생성 -> 준비 -> 사용 -> 해제 -> 삭제]
  2. '준비' 과정의 중요성
    • '준비' 단계는 간단한 로직에서는 생성 단계에 포함될 수 있지만, 복잡한 로직에서는 별도로 준비 단계가 필요합니다.
    • '준비'의 범위는 사람마다 다를 수 있으며, 정답이 없기 때문에 초기화의 개념으로 이해하는 것이 중요합니다.
    • 예를 들어, 에어컨 리모컨에 배터리를 넣는 것이 준비일 수도 있고, 배터리와 리모컨을 제공하는 것까지가 준비일 수도 있습니다. 즉, '준비' = 초기화의 개념으로 사용 준비가 끝났다는 의미로 이해할 수 있습니다.

변수 초기화의 개념

  1. 변수 초기화에 대한 오해
    • 변수를 초기화하지 않으면 '쓰레기값'이 들어간다는 말은 오해입니다. 실제로는 메모리 표기값이 들어가며, 이는 한번도 사용되지 않은 메모리를 나타냅니다.
    • 예를 들어, 동적 변수의 경우 cdcdcdcd, 전역 변수의 경우 cccccccc와 같은 값이 나타납니다.
  2. 초기화의 의미
    • 초기화란, 이 변수가 사용 준비가 끝났음을 알리는 것입니다. 이후에는 이 변수를 자유롭게 사용할 수 있습니다.
int i = 0;
  • 예를 들어 이 코드에서 i 를 바로 사용하기 위해 초기화한 것입니다. 물론 초기화를 나중에 해도 문제는 없습니다.
int i ;

i = 0;

유니폼 초기화 (Uniform Initialization)

  1. 생성자 초기화, 대입연산자 초기화
int nData = 0;

nData = 0;
  • 위 코드에서는 생성자 초기화로, 처음부터 nData를 0으로 초기화를 하여 사용한다고 볼수있다.
  • 아래와 같은 코드의 경우 대입연산자 초기화이다.

 

  • c++로 넘어오면서 구별가능하게 바뀌었는데 이것이 
int nData (0);
  • 사용자가 값을 넣어준 것이지만, 자료형 기능별로 어떤 초기화가 이루어지는지 알아야 하는 문제점이 있었습니다.
  1. 유니폼 초기화의 도입
    • 이러한 문제를 해결하기 위해, C++에서는 유니폼 초기화가 도입되었습니다. 이는 변수를 '0으로 초기화(청소)'하는 방법입니다:
int nData{};
  • 위 코드는 nData를 0으로 초기화해주세요라는 의미입니다.

연산자 우선순위

  1. 연산자 우선순위
    • 대입 연산이 제일 마지막에 수행됩니다.
    • 우선순위:
      1. 변수명 뒤에 붙는 경우 (후위 연산자, 예: b++)
      2. 변수명 앞에 붙는 경우 (전위 연산자, 예: ++a)
      3. 변수명 뒤에 따로 있는 경우 (이항 연산자, 예: +, *)
  2. 예시 코드
int a = 5, b = 3;
int result = b++ + ++a * b;
 
  • 연산 순서:
    1. b++ (후위 증가): b의 현재 값 3을 사용하고 b는 4로 증가.
    2. ++a (전위 증가): a를 6으로 증가시킨 후 사용.
    3. ++a * b (곱셈): 6 * 4 = 24.
    4. b++ + (3 + 24 = 27).
  • 최종 결과: result = 27, a = 6, b = 4.

 

  • 모든 오퍼레이터들은 값을 남긴다.

'C++' 카테고리의 다른 글

[강의] 8월 19일 수업정리  (0) 2024.08.19
[강의] 8월 16일 수업정리  (0) 2024.08.16
[강의] 8월 14일 수업정리  (0) 2024.08.14
[강의] 8월 12일 수업정리  (0) 2024.08.12
[강의] 8월 8 ~9일치 수업정리  (0) 2024.08.09