목록C++/기본문법 (5)
하아찡

mutex는 일반적인 상황에서는 사용이 되지않고 멀티 쓰레드를 사용하게 될때 필요합니다. 왜 일반적인 상황에서 사용이 안되는지부터 알아봅시다. 일반적으로 코드를 작성하게되면 변수값은 Main쓰레드 혼자 작업을 하게됩니다. 그러다보니 외부(다른쓰레드)에서 해당 변수값을 변경하는 일이 발생할 수 없기 때문에 사용을 하지않는데 만약에 우리가 다른 쓰레드를 생성해서 동일한 변수를 여러 쓰레드가 동시에 수정하게되면 어떻게 될까요?정말 이상적으로 생각했을땐, "컴퓨터가 동시에 처리한다해도 순서라는게 있으닌깐 값이 정상적으로 변하겠지?" 라고 생각을 하실겁니다. 저도 그랬으닌깐요. 근데 막상 실행을 시켜보고 값을보면 정말 잘 나올 수도 있지만, 원하는 값으로 안 나올 수도 있습니다. 여기서 문제가 발생합니다.코드를 ..
접근제한자는 클래스 변수나 메소드에 대한 접근범위를 제한하는 키워드입니다. 캡슐화의 요소중 하나이죠. 자그러면 접근제한자 종류를 알아보죠크게 Public, Private, Protected가 존재합니다.첫번째 Public 부터 살펴보시죠 public으로 변수나 메소드를 생성했을 경우에는 어디서든 누구든지 사용이 가능한 변수 혹은 메소드 입니다.여기서 누구든지 사용이 가능하다는건 무엇이냐? 바로 코드로 보시죵#include #include class Base {public: std::string str;public: Base() : str("Base") { std::cout 위 코드를 봤을때 main 함수 내부에서 Base클래스를 사용해서 객체를 만듭니다.이 과정에서 클래스를 사용..
매번 그냥 이름이 헷갈린다.오버로딩.. 오버라이딩...왜 앞에 두개가 똑같아서 일단 오버라이딩부터 보자.오버라이딩은 Base클래스에서 Derived클래스 측에서 "함수명, 매개변수, 리턴타입"이 동일해야합니다.다른말로하면 부모클래스에서 자식클래스에서 "함수명, 매개변수, 리턴타입"이 동일해야합니다.또 다른말로하면 기본클래스에서 파생클래스 측으로 "함수명, 매개변수, 리턴타입"이 동일해야합니다. 그래서 어디서 쓰냐?상속받은 메소드를 재정의해서 사용을 하게됩니다.기존에 상속받아서 쓰던 메소드가 있었는데 해당 메소드를 상속받은 클래스에서 다르게 사용하게될때 새롭게 재정의 한다고 생각하면 됩니니다. 예시를 보자면#include #include class Base {private: std::string ..

포인터를 배우면서 같이 배우게 되는 레퍼런스(참조자)는 참 알쏭 달쏭한 친구죠. 결과부터 말하자면제가생각하는 레퍼런스를 가장쉽게 설명하는방법은 "친구의 별명" 이라고 생각합니다. 자 여기서 왜 친구의 별명이라고 설명을 했는지를 알고 넘어가야하죠.만약 우리가 A라는 친구를 "똥쟁이" 라고 별명을 지었어요.그러면 우리는 "똥쟁이"를 부르면 A를 부르는걸 알고있죠? 이렇게 간단하게 생각하면 됩니다. 하지만 우리가 공부를 하는데 있어서 간단하게만 알고 넘어갈수도 있지만, 좀 더 알고싶은데? 라고 생각하신다면 더 읽어보셔도 되겠습니다. 일단 기본적으로 "포인터는 메모리상에 남게되고, 참조자는 메모리에 남을수도 있다." 라는 말이 있습니다.그러면 구체적으로 뭐가 다른지를 다시 확인을 하고 넘어가야겠죠. 포인터는 주..
프로그램을 배우면 거의 처음부터 나오는 변수는 무엇일까? 말 뜻 그대로 보자면 변하는 수입니다.하지만 여기서 우리는 프로그램을 공하는 입장에서 더 풀어서 적어보자면, 변하는 수를 저장하는 공간 입니다. 자 여기서 변하는 수? 오케이 공간? 오케이 근데 어따씀?처음 공부를 하면 도대체 어디서 써야할지 하나도 감이 안옵니다. 처음 공부할땐 간단하게 생각합니다. 일단 다 만들고 봐요. 그러고나서 점점 하다보면 비효율 적이다 생각이 들때 다시한번 생각해보면 변수를 꼭 필요한 곳에서만 사용하게 됩니다.간단하게 예를 들어보겠습니다.예를들어 "50이라는 숫자를 저장하고싶고, 100이라는 숫자를 저장하고 싶어" 라고 했을때 50이라는 숫자와 100이라는 숫자를 동시에 가지고 있어야하는 상황입니다. 이럴땐 변수를 두개를..