목록All (101)
noname02
매우 간단.JAVA의 super와 같다.자식 클래스의 변수가 부모 클래스와 같으면, 자식 클래스의 변수가 부모 클래스의 변수를 가리게 되는데 이 때 super 키워드를 사용하면 부모 클래스의 변수를 뜻하게 된다. 굳이 변수가 아니어도 super라는 키워드 자체가 부모 클래스를 가리킨다는 키워드이다.
코루틴(Coroutine)이 뭔가요? C 언어등에서 일반적으로 사용하는 함수는 시작할 때 진입하는 지점이 하나 존재하고 함수가 모두 실행되거나, return 구문에 의해서 종료되는 지점을 설정할 수 있습니다. 이러한 함수를 서브루틴(Subroutine)이라 부르는데, 코루틴은 이를 더 일반화한 개념으로 진입하는 지점까지 여러 개를 가질 수 있는 함수를 의미합니다. 개념적으로만 본다면 서브루틴도 코루틴의 한 종류라고 볼 수 있겠지요. 코루틴이 왜 필요한가요? 코루틴이 없어도 게임을 만드는데 지장은 없습니다. 하지만 유니티에서 코루틴을 잘 활용하면 높은 성능을 내는 스크립팅의 제작이 가능해지고, 읽기 쉬운 코드를 만들 수 있게 됩니다. 코루틴은 어떻게 사용하나요? C# 언어를 기준으로, 코루틴은 언제나 아래..
out과 ref 키워드는 매개변수의 값을 참조하게 한다.C와 C++에서 포인터를 생각하면 된다. 혹은 C++에서 &연산자를 생각하면 된다.객체는 어차피 항상 참조형이므로 굳이 사용할 필요는 없다. out과 ref는 매개변수에 키워드를 적어줘야 한다.정의할 때에는 당연히 12public void Method(ref int a) { ... } ;public void Method(out int a) { ... } ;cs 의 형태로 정의를 하며, 이 함수를 호출할 때에는 12Method(ref a);Method(out a);cs 의 형태로 ref, out을 명시해줘야 한다. ref와 out의 차이점이라고 한다면, ref는 매개변수를 전달할 때 해당 변수가 꼭 초기화가 되어있어야 된다는 것이다. 1234int a..
드래그 하고 난 뒤 Ctrl + K + F!
as DataTypeDataType 으로 형 변환이 가능하면 해당 형으로 반환하며, 불가능하면 null을 반환한다. is DataTypeDataType 으로 형 변환이 가능하면 true, 아니면 false를 반환한다. (논리연산자)
Arrays.toString(배열); 배열의 값들을 모두 표기한다.
-202쪽 클래스의 로딩 시기는 JVM마다 달라서 클래스 초기화 블럭의 사용을 심사숙고해봐야 한다.
- 인스턴스 변수는 초기화를 안해주면 기본값으로 설정된다.- 배열 역시 초기화를 안해주면 기본값으로 설정된다.- 클래스변수(static)도 초기화를 해주지 않으면 기본값으로 설정된다.- 지역변수는 초기화를 해주지 않으면 사용 불가능하다. -200쪽 참고
JAVA 174쪽 참고
1. 형변환변수 선언시 float a = 3.14 의 경우, C/C++은 자동 형변환으로 3.14를 float형으로 변환시키지만 JAVA는 컴파일 에러.큰 자료형->작은 자료형 변환의 경우 C/C++은 컴파일러가 알아서 하지만(손실되지만) JAVA는 컴파일 에러.단, 작은 자료형->큰 자료형의 경우 자동으로 형 변환 2. char형의 크기차이C/C++은 1byte(ASCII코드라서) JAVA는 2byte(UNICODE라서) 3. const와 finalC/C++의 상수화는 const, JAVA는 final 4. 다차원배열C/C++의 경우 5x3의 배열, 5x5의 배열 등 무조건 사각형 크기의 배열이 선언되지만JAVA의 경우 행 성분이 각각 다를 수 있다.즉 C/C++은 ㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁ 와 같아..
- 클래스 내에 선언된 const 멤버변수의 초기화는 이니셜라이저를 통해야만 한다.
1234567891011121314151617181920212223242526272829303132333435363738#include using namespace std; class SoSimple{private: int num;public: SoSimple(int n) : num(n) { cout
디폴트 생성자는 객체에 생성자가 단 하나라도 정의되어 있지 않은 경우 컴파일 과정에서 자동으로 생성하며, 만약 하나의 생성자라도 정의된 경우 디폴트 생성자는 자동으로 생기지 않는다.예를 들어서 12345678class AAA{ int aaa;public: AAA (int ABC) : aaa(ABC)..}cs 와 같이 객체가 선언되었다고 하면, 앞으로 AAA객체를 선언해야 하는 경우AAA abc; 와 같은 형태로는 선언이 불가능하다는 뜻이다. 무조건AAA (123); 과 같이 선언을 해야 한다.물론 오버로딩을 통해 디폴트선언자를 따로 명시해주면 가능하다.
소멸자는 어떤 특정한 함수 A 내에서 객체가 생성되고, 그 함수A가 종료됨과 동시에 객체가 사라진다면(본래 함수 내에서 선언된 변수는 함수 종료와 함께 사라진다. 객체도 마찬가지.) 함수가 종료되기 바로 전에 소멸자가 처리되고 함수가 종료된다.평소에는 딱히 쓸 일이 없지만, 만약 객체에서 힙 영역을 사용하게 된다면, 함수가 종료되어도 해당 힙 영역에 생성된 메모리는 제거되지 않을 것이다. 이 때, 소멸자에 delete 함수를 통해서 할당된 메모리를 해제시켜줘야 메모리 효율이 좋으므로 보통 이런 경우에 사용한다. 참고로 힙 영역으로 할당된 유효메모리는 프로그램이 종료되도 사라지지 않는다.따라서 반드시 delete 명령어를 통해 memory leak를 방지해줘야 한다.
문자열 변수의 경우 배열의 선언과 동시에 초기화가 가능하다. char[30]="Hello Boy";이렇게 선언과 동시에 초기화가 가능하다. 단, 그 이후에 char="Hello Boy" 등의 조작은 불가능하다.
접미사 자료형 사용 예 u , U unsigned int 304U l , L long 304L ul , UL unsigned long 304UL f , F float 3.15F l , Llong double3.15L
const 키워드는 상수화를 뜻하는데, 이는 값의 변경이 원칙적으로 차단되는 것을 말한다.즉 10=20; 같이 상수의 변경이 불가능한 것처럼, 변수를 상수화시켜 변수의 값 변경을 불가능하게 하는 것이다. 1) 변수의 상수화 const int A=10;- 변수를 선언과 동시에 초기화시켜, 나중에 값을 바꾸지 못하게 한다.- 값이 변하면 안되는 변수가 필요할 때 사용한다. 소스가 짧은 줄이면 딱히 문제 될게 없지만, 소스의 길이가 길어지면 프로그래머의 실수로 바꾸면 안될 값을 바꾸는 것을 방지할 수 있다.- 반드시 선언과 동시에 초기화를 시켜야 하며, 그렇지 않은 경우 컴파일 오류를 발생시킨다.- 메크로 상수와 개념이 비슷하다. 2) 포인터가 가리키는 변수의 상수화 int a = 10;const int* p..
static 변수는 지역변수이면서 전역변수의 성질을 가지고 있다.전역변수의 경우 프로그램 전체에서 접근이 가능한 변수이면서, 초기화가 한 번 이루어지면 다시는 이루어지지 않는다.하지만 전역변수의 사용은 신중해야 하는데, 전역변수를 사용한 뒤 변경해야할 상황이 온다면, 프로그램 전체에 걸쳐서 바꿔야 하는 상황이 발생할 수 있다.static 변수는 지역변수이지만 전역변수와 마찬가지로, 함수의 호출이 끝나도 메모리에 남아있게된다.하지만 static 변수가 선언된 지역에서만 사용가능 하다는 것이 특징이다.static 변수는 전역변수와 마찬가지로 한 번 선언 되면 다시 선언되지 않는다.즉 static int i=1으로 한번 선언되고 i의 값이 변한 뒤 함수가 종료되고 나서 다시 함수의 호출로 i=1로 선언되지 않..
문자 출력 함수#include int putchar(int c);int fputc(int c, FILE* stream); 공통- 오류 발생 시 EOF 리턴. 문자 입력 함수#include int getchar(void);int fgetc(FILE* stream); 공통- 에러, 파일 끝 도달시 EOF 리턴. 문자열 출력 함수#include int puts(const char* s);- 자동으로 줄을 바꿔줌.int fputs(const char* s, FILE* stream);- 자동으로 줄을 바꿔주지 않음. 공통- 오류 발생 시 EOF 리턴. 문자열 입력 함수#include char* gets(char* s);- 리턴값 받는 변수의 크기가 입력받은 값보다 크면 overflow가 되므로 사용하지 않음.ch..
특수 문자 의미 \a 경고음 \b 백스페이스 \f 폼 피드 \n 엔터 \r 캐리지 리턴 \t 수평 탭 \v 수직 탭 \\ 백 슬래시 \' 작은 따옴표 \"큰 따옴표서식 문자의미%c단일 문자%d부호有 10진 정수%i==%d %f부호有 10진 실수%s문자열 %o부호無 8진 정수 %u부호無 10진 정수%x부호無 16진 정수(小)%X부호無 16진 정수(大) %ee 표기법 실수%EE 표기법 실수%g소숫점 자리에 따라 %f 혹은 %e(E)로 표기%G%%%기호 출력 %8d(f) 8칸 확보, 오른쪽 정렬%-8d(f)8칸 확보, 왼쪽 정렬%+8d(f)8칸 확보, 오른쪽 정렬, 부호표기%08d(f)8칸 확보, 남은칸 0으로 채움%.3d3자리만 출력%.3f소수점 3자리만 출력
int main(int argc, char** argv) int argc- 프로그램을 부를 때 전달된 문자열의 갯수 char** argv- argv[0] : 프로그램의 이름 문자열 상수포인터- argv[1~n] : 나머지 전달된 문자열 상수포인터 main함수의 인자는 도스환경에서 쓰이는데,도스 환경에서 프로그램을 실행하는 경우 C:\>프로그램의_이름 의 형태로 실행시킨다. 그런데 main함수에 인자를 받게 된다면 C:\>프로그램의_이름 인자1 인자2 .... 의 형태로 스페이스를 기준으로 인자를 전달받게 되는데 이 경우int argc의 값은 3이 되고, argv 더블포인터 배열은 3개가 생성된다.즉 argc는 최소값이 1이며, argv 더블포인터 배열은 최소 1개(프로그램의 이름)를 갖게 된다.
버퍼 관련#include fflush(stdin);- 입력 버퍼를 비움fflush(stdout);- 출력 버퍼를 비움 입출력 관련 #include int fputc(int c, FILE* stream);- 문자 출력int fgetc(FILE* stream);- 문자 입력int fputs(const char* s, FILE* stream);- 문자열 출력char* fgets(char* s, int n, FILE* stream);- 문자열 입력int fprintf(FILE* stream, const char* format, ...);- 형식지정 문자열 출력int fscanf(FILE* steam, const char* format, ...);- 형식지정 문자열 입력 EOF #include int feof(F..
여러개의 헤더 파일을 전처리하는 경우, 중복되는 경우가 발생할 수 있다.이 때 #pragma once와 #ifndef ~ #endif 를 사용하게 되는데초기에는 #ifndef XX #define XX ~~~~~ #endif 구문을 사용하였다.~~~~~부분에 헤더에 들어갈 내용을 적어두면, 컴파일 과정에서 중복으로 선언하는 경우가 사라지기 때문이다.그리고 이렇게 쓰이는 것을 간단하게 한 내용이 #pragma once이다.그러면 #pragma once를 사용하면 끝일 것 같은데, #ifndef ~ #endif 구문을 사용하는 이유는컴파일러에 따라서 #pragma once를 인식하지 못하는 컴파일러도 존재할 수 있기 때문이란다.요즘엔 그럴 경우는 거의 없다는데..
조건 ? A : B; 조건이 true인 경우 A를 반환, false인 경우 B를 반환한다.생각해보면 함수는 일종의 연산자라고 볼 수 있는 것 같다.인자를 받아서 작업 후 값을 반환하는 것인데, 연산자가 바로 그러한 것 아니겠는가?이 삼항연산자라는 이름이 붙은 이유는 항목이 3항으로 이루어져있기 때문이다.조건, A, B 이렇게 3개로.조건식에는 괄호가 없어도 되지만, 가독성을 위해 괄호를 넣는것이 좋을 것 같다.
123456789101112131415#include #define PLUS(a,b,c) printf(#a "+" #b "+" #c "= %d\n",a+b+c)#define TIMES(a,b,c) printf(#a "*" #b "*" #c "= %d\n",a*b*c) int main(void){ int a,b,c; printf("정수 3개 입력: "); scanf_s("%d %d %d",&a,&b,&c); PLUS(a,b,c); TIMES(a,b,c); return 0;}Colored by Color Scriptercs 예상으로는 1+2+3= 6, 1*2*3=6 이렇게 출력되어야 하지만, 실제로는 그렇지 않았다.#define 선언은 단순 치환인데, 여기서 대체되는 영역에 들어가있는 #(문자열로 인식)은 ..