문자열은 불변객체이다. 문자열 자체는 변경할 수 없지만, 문자열을 다른 곳으로 복사해서 변경할 수 있다. poem = '''aaaaaaaaa dddddddddddd cccccccccccc''' print(poem) 여러줄을 입력하고 싶다면 양옆에 ''' 작은따옴표 3개 를 이용하면 된다. """ 큰따옴표도 된다. print(str(98.6)) print(str(55)) 문자열 타입으로 변환 할 때는 str()을 쓰면 된다. print 함수는 기본적으로 str 문자열로 변환 후 print로 출력하게 되어 있다.
파이썬 데이터는 객체다 파이썬은 각 데이터 값(불리언, 정수, 부동소수점 숫자, 문자열, 자료구조, 함수 및 프로그램)을 메모리에 객체로 래핑한다. 리스트, 바이트배열, 셋, 딕셔너리는 가변객체이다 이 외에 모든것은 불변객체다. 데이터 값을 변경할 수 있는것 가변 일정하게 유지할 수 있는 것 불변 이것에 대한 설명은 밑에서 다시 하겠다. y = 5 x = 6 print(id(y)) print(id(x)) a = y print(id(a)) 위와 같이 입력하면 y와 a는 같은 값이 나오게 되고 x는 다른값이 나오게된다. 파이썬에서는 이미 만들어진 값을 재 할당하면 C언어에서의 포인터처럼 주소값을 넘겨주게 되어 있다. 그래서 하나의 변수에 2개가 참조하고 있는것이다. y = 5 x = 12 - y print(..
안드로이드 스튜디오에서 Kotlin 문법을 알아보도록 한다. Kotlin으로 test파일을 만들어주자. package com.example.kotlinwork fun main() { print("kotlin test..") } 실행법은 오른쪽 클릭 후 Run을 누르면 된다. main 함수는 fun main() { } 이라고 표현한다. print문은 파이썬과 같다. 단 print문은 줄바꿈이 없다. println으로 해야 줄바꿈이 같이 된다. 파이썬처럼 println("""gg""".trimIndent())이게 가능하다. 단 문자열 뒤에 trimIndent()가 붙는다. package com.example.kotlinwork.basic fun main() { //변수 선언하는 방법 //var 변수명 : 데..
파이썬에서 쓰레드를 작성하는 방법 threading모듈을 이용해서 작업 싱글쓰레드는 모든 코드의 실행이 끝나야 주 쓰레드가 종료된다. 주 쓰레드가 종료되어야 프로세스가 종료된다. 멀티쓰레드는 주 쓰레드가 먼저 종료될 수 있다. 실행 중인 쓰레드가 하나라도 있으면 프로세스는 종료되지 않는다. 1. 멀티쓰레드로 즉, 독립적인 실행흐름을 갖고 실행하고 싶은 코드를 함수를 정의해서 구현한다. 2. threading.Thread()객체를 생성할때 target이라는 매개변수에 멀티쓰레드로 실행하고 싶은 함수명(1번에서 정의한 함수명)을 지정 객체변수 = threading.Thread(target="함수명", args=(a,b....)) threading.Thread클래스의 매개변수 target : 쓰레드로 실행할 ..
C++ R-Value를 이용한 이동 대입L-Value를 이용해서 밑에와 같이 간단한 프로그램을 만들었다고 치자. main.cpp#include "Resource.h" #include "AutoPtr.h" #include "Timer.h" AutoPtr generateResource() { AutoPtr res(new Resource(10000000)); return res; } int main() { Timer timer; { AutoPtr main_res; main_res = generateResource(); } timer.elapsed(); } AutoPtr.h#pragma once #include template class AutoPtr { T *m_ptr; public: AutoPtr(T *pt..
C++ 메모리 누수 체크하기C++에서 프로그래머가 예상치 못하게 메모리 누수를 체크 못하는 경우가 있다.이럴 경우를 대비해서 메모리 누수 체크를 해보자. #include #include // _CrtDumpMemoryLeaks() 사용하기위해 #if _DEBUG #define new new(_NORMAL_BLOCK, __FILE__, __LINE__) #define malloc(s) _malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__) #endif // 몇행에서 메모리 누수가 나는지 알려줌. using namespace std; int main() { int *a = new int; _CrtDumpMemoryLeaks(); // 메모리 누수 체크 return 0; }먼..
C++ override, final, 공변 반환값override 키워드#include using namespace std; class A { public: virtual void print(int x) { cout
C++ 상속 받은 함수 감추기부모 클래스에서 자식 클래스 상속을 했을 때 부모 클래스에 있는 멤버 변수를 자식 클래스에서 마음대로 변경을 하고 싶으면 어떻게 해야 될 까?? 부모 클래스 멤버 변수를 public 으로 선언을 한다던지 protected로 선언을 해서 자식 클래스에서 마음대로 변경을 한다던지 여러가지 방법이 있다. #include using namespace std; class Base { protected: int m_i; public: Base(int value) : m_i(value) {} void print() { cout
C++ assert와 static_assert 우리는 프로그램을 만들 때 디버깅 시간이 많이 걸리게 된다.디버깅을 할때도 컴파일러 도움을 받는다면 디버깅이 더욱 더 쉽고, 시간이 적게 들 것이다. 사용법은 간단하다.일단 assert()에 대해서 알아보자.assert는 런타임(실행중)중에만 된다. #include #include // assert.h using namespace std; int main() { assert(false); return 0; }먼저 이렇게 하고 assert가 어떻게 동작을 하는지 알아보자. 이렇게 7행에 오류가 있다고 런타임 에러(runtime error)가 뜬다. 디버깅 모드에서는 _DEBUG가 정의 되어있으면 assert가 동작을 하고 Release 모드에서는 NDEBUG가..
C++의 explicit 키워드는 뭘 하는 건가요?C++컴파일러는 함수의 인자로 들어오는 값을 알아서 타입에 맞게 바꿀 수 있습니다. 이게 무슨 뜻인지는 다음의 예제로 설명할게요. class Foo{ public: int m_foo; Foo (int foo) : m_foo (foo) {} }; void printM_foo (Foo foo){ cout
C++ std::tuple 함수 반환값을 여러개 리턴하기 보통 함수를 사용하게 되면 반환값은 하나만 나오게 되어 있다.근데 C++17에서는 std::tuple 이라는 것이 나왔으며 tuple 사용하게 되면 반환값을 여러개 리턴할 수 있다. std::tuple을 사용하지 않고 struct를 사용해서 여러개 받을 수 있지만 tuple을 사용해보자.#include #include using namespace std; std::tuple getTuple() { int a = 10; double d = 3.14; return std::make_tuple(a, d); } int main() { std::tuple my_tp = getTuple(); cout
C++ std::vector 동적배열 대체 vector는 동적할당 해주는 기능을 가지고 있다.그리고 우리가 동적할당 할때 우리가 직접 new해서 힙에 메모리 주소를 받아오고사용이 끝나면 delete를 해줘야 한다는 불편함이 있다. 근데 vector는 이런 기능이 포함되어있고 자기가 알아서 delete를 해준다. #include #include using namespace std; int main() { int *my_arr = new int[5]; delete[] my_arr; std::vector arr2 = { 1,2,3,4,5 }; cout