목록전체 글 (29)
개발자 최승준
리플렉션(Reflection) 이란? 실무에서 코드 리뷰를 할때, 리플렉션을 사용한 코드가 여러번 등장했었습니다.저는 대략적인 개념은 알고 있었지만, 코드 리뷰를 하려면 정확하게 리플렉션에 대해서 알아봐야겠다는 생각이 들었습니다. 이번 기회에 리플렉션에 대해서 깊게 알아보죠. Reflect - 반사하다, 비추다 reflect는 반사 또는 비추는 느낌의 뜻을 가지고 있는 영어단어입니다.거울에 사물을 비치면 그 모습을 반사해서 보여줍니다.프로그래밍에서의 리플렉션은 거울에 비치듯이 프로그램이 자신을 들여다보고 분석할 수 있는 능력을 의미합니다. 하지만, 이렇게만 비유를 들었을 때는 이해하기 어려운게 맞습니다.조금 더 코드의 본질적인 영역으로 들어가봅시다. 리플렉션은 런타임에 존재하는 할당된 객체나 값을 ..
테니스 코트 위의 절대자 - 김군0619 이 소설은 * 테니스를 좋아하고 * 상세한 묘사가 답긴 스포츠 물 * 동시에 가벼운 일상도 섞이며 * 한번에 초고수가 되지는 않지만 성장하는 모습을 느낄 수 있고 * 개연성있는 스토리 위 요소들을 좋아하시는 분이라면 적극 추천드립니다. '우주'라는 한국인 소년이 프로 테니스 세계에서 성장하고 활약하는 소설입니다. 시대는 한창 페나조머 테니스 계의 BIG 4가 활동할 시기입니다. 요즘 시대보다 더 강력하고 무시무시한 페나조가 존재하기에 소설 속의 시기는 더 흥미롭습니다. 마치 축구물로 치면 메날두 시대인거죠. 개인적으로 김군 작가님을 좋아하는데, 개연성을 가지고 스토리를 길게 끌어가는 과정이 좋습니다. 테니스, 농구, 축구 경기들을 많이 봅니다. 그 중 테니스를 가..
C언어에서 구조체의 크기는 변수들의 타입 값의 합일까? 아니다. 만약 그림 첫번째 구조체가 그대로 메모리 상에 배치된다면, (int는 4바이트, short는 2바이트 환경인 32비트 컴퓨터로 가정하자) 1바이트 (char) + 4바이트 (int) + 1바이트 (char) + 2바이트(short) = 8바이트 총 8바이트가 되어야 할 것이다. 하지만 Memory Alignment 로 인해서 padding이 생기고, 1바이트 (char) + 3바이트(padding) + 4바이트(int) + 1바이트(char) + 1바이트(padding) + 2바이트(short) = 12바이트 총 12바이트가 된다. 왜 이럴까? 만약 char a 옆에 int b를 배치해서, int 자료형의 배치가 두개의 주소층으로 나눠진다면..
변수는 scope(유효 범위), life time(유효 시간)으로 나눠서 판단할 수 있다. 전역 변수와 정적 변수는 데이터 영역에 저장된다. 메모리 데이터 영역에 프로그램 시작시에 저장되고 프로그램 종료시에 메모리 영역에서 해제되므로 변수의 life time은 프로그램 시작과 종료이다. 반면 지역 변수는 함수에서 선언되고 스택에 저장된다. 메모리 스택 영역에는 각 함수의 프레임이 저장되고, 함수 호출이 종료되면 스택에 할당되있던 함수 메모리 영역이 해제되므로 지역 변수의 life time은 함수의 실행부터 종료될 때까지이다. 전역 변수의 scope는 프로그램 전체에서 통용된다. 단, 다른 파일에서 전역 변수에 접근하기 위해서는 extern 선언이 필요하다. 지역 변수의 scope는 선언한 함수나 블록 내..
메모리 레이아웃에서 데이터 영역은 두가지로 나누어진다. 일반적으로 Data 영역은 초기화된 전역 변수들과 정적 변수들이 저장되는 영역이다. BSS(Block Started by Symbol) 영역은 초기화되지 않은 전역 변수들과 정적 변수들이 할당되는 영역이다. 초기화된 변수들이 있는 Data 영역은 값을 설정하고 메모리에 저장해둔다. 하지만 BSS 영역은 프로그램 시작 전에 메모리에 할당할 필요는 없기에, 데이터의 크기만 저장해뒀다가 프로그램이 시작되고 모두 0으로 초기화해준다. 즉 프로그램 영역은 BSS를 제외한 Text, Data 영역이 된다. 출처 : ACE Lab 프로그램이 실행되면 Secondary Memory, ROM에서 텍스트와 데이터를 Main Memory, RAM 으로 옮긴다. 위 코드..
C언어에서 문자열을 사용할 때 2가지 방법을 사용해서 다룬다. char s[] = “hello”; char *s = “hello”; 위의 “hello\0”는 상수 값이므로 메모리에서 텍스트 영역에 저장되어 있다. 1) 코드가 실행되면 함수에서 s라는 지역변수를 생성하면 스택에 할당되고, 스택 프레임에 s가 생성되며 memcpy를 통해 텍스트 영역에 저장되어 있던 “hello\0”가 할당된다. 2) 코드가 실행되면 동일하게 지역변수가 생성되고, “hello\0”가 저장되어 있는 텍스트 영역에 주소가 포인터 s에 저장된다. 만약 s[0] = ‘t’; 를 실행한다면 1,2에서 어떤 변화가 일어날까? 아무 문제 없이 h가 t로 변경된다. 저장된 주소에 있는 값에 t를 할당을 시도하게 된다. 그런데 2번의 경우 ..