프로세스 & 스레드 프로세스(Process) : 프로그램을 메모리 상에서 실행중인 작업 스레드(Thread) : 프로세스 안에서 실행되는 여러 흐름 단위 기본적으로 프로세스마다 최소 1개의 스레드 소유 (메인 스레드 포함) 프로세스는 각각 별도의 주소공간 할당 (독립적) Code : 코드 자체를 구성하는 메모리 영역(프로그램 명령) Data : 전역변수, 정적변수, 배열 등 (초기화된 데이터) Heap : 동적 할당 시 사용 (new(), mallock() 등) Stack : 지역변수, 매개변수, 리턴 값 (임시 메모리 영역) 스레드는 Stack만 따로 할당 받고 나머지 영역은 서로 공유 하나의 프로세스가 생성될 때, 기본적으로 하나의 스레드 같이 생성 프로세스는 자신만의 고유 공간과 자원을 할당받아 사..
가상 함수(Virtual Function) C++에서 자식 클래스에서 재정의(오버라이딩)할 것으로 기대하는 멤버 함수를 의미함 멤버 함수 앞에 virtual 키워드를 사용하여 선언함 → 실행시간에 함수의 다형성을 구현할 때 사용 선언 규칙 클래스의 public 영역에 선언해야 한다. 가상 함수는 static일 수 없다. 실행시간 다형성을 얻기 위해, 기본 클래스의 포인터 또는 참조를 통해 접근해야 한다. 가상 함수는 반환형과 매개변수가 자식 클래스에서도 일치해야 한다. class parent { public : virtual void v_print() { cout
[Cpp] 얕은 복사 vs 깊은 복사 shallow copy와 deep copy가 어떻게 다른지 알아보자 얕은 복사(Shallow Copy) 한 객체의 모든 멤버 변수의 값을 다른 객체로 복사 깊은 복사(Deep Copy) 모든 멤버 변수의 값뿐만 아니라, 포인터 변수가 가리키는 모든 객체에 대해서도 복사 struct Test { char *ptr; }; void shallow_copy(Test &src, Test &dest) { dest.ptr = src.ptr; } void deep_copy(Test &src, Test &dest) { dest.ptr = (char*)malloc(strlen(src.ptr) + 1); strcpy(dest.ptr, src.ptr); } shallow_copy를 사용하..
SQL Injection 해커에 의해 조작된 SQL 쿼리문이 데이터베이스에 그대로 전달되어 비정상적 명령을 실행시키는 공격 기법 공격 방법 1) 인증 우회 보통 로그인을 할 때, 아이디와 비밀번호를 input 창에 입력하게 된다. 쉽게 이해하기 위해 가벼운 예를 들어보자. 아이디가 abc, 비밀번호가 만약 1234일 때 쿼리는 아래와 같은 방식으로 전송될 것이다. SELECT * FROM USER WHERE ID = "abc" AND PASSWORD = "1234"; SQL Injection으로 공격할 때, input 창에 비밀번호를 입력함과 동시에 다른 쿼리문을 함께 입력하는 것이다. 1234; DELETE * USER FROM ID = "1"; 보안이 완벽하지 않은 경우, 이처럼 비밀번호가 아이디와 ..
Array vs ArrayList vs LinkedList 세 자료구조를 한 문장으로 정의하면 아래와 같이 말할 수 있다. Array는 index로 빠르게 값을 찾는 것이 가능함 LinkedList는 데이터의 삽입 및 삭제가 빠름 ArrayList는 데이터를 찾는데 빠르지만, 삽입 및 삭제가 느림 좀 더 자세히 비교하면? 우선 배열(Array)는 선언할 때 크기와 데이터 타입을 지정해야 한다. int arr[10]; String arr[5]; 이처럼, array은 메모리 공간에 할당할 사이즈를 미리 정해놓고 사용하는 자료구조다. 따라서 계속 데이터가 늘어날 때, 최대 사이즈를 알 수 없을 때는 사용하기에 부적합하다. 또한 중간에 데이터를 삽입하거나 삭제할 때도 매우 비효율적이다. 4번째 index 값에 ..
네이버 카페 https://cafe.naver.com/spring4shoppingmall 스프링으로 구현하는 쇼핑몰 : 네이버 카페 JSP와 스프링을 학습 후 쇼핑몰을 구현해 봅니다. cafe.naver.com 깃허브 https://github.com/gilbutITbook/006895 gilbutITbook/006895 자바 웹을 다루는 기슬_예제 소스. Contribute to gilbutITbook/006895 development by creating an account on GitHub. github.com 강의를 시작하며 https://youtu.be/qhc50ZYY4PM 1.1 클라이언트 PC 프로그램의 특징 https://youtu.be/HqK0A8ShAbg 1.2 클라이언트 서버 프로그램..
Linked List 연속적인 메모리 위치에 저장되지 않는 선형 데이터 구조 (포인터를 사용해서 연결된다) 각 노드는 데이터 필드와 다음 노드에 대한 참조를 포함하는 노드로 구성 왜 Linked List를 사용하나? 배열은 비슷한 유형의 선형 데이터를 저장하는데 사용할 수 있지만 제한 사항이 있음 배열의 크기가 고정되어 있어 미리 요소의 수에 대해 할당을 받아야 함 새로운 요소를 삽입하는 것은 비용이 많이 듬 (공간을 만들고, 기존 요소 전부 이동) 장점 동적 크기 삽입/삭제 용이 단점 임의로 액세스를 허용할 수 없음. 즉, 첫 번째 노드부터 순차적으로 요소에 액세스 해야함 (이진 검색 수행 불가능) 포인터의 여분의 메모리 공간이 목록의 각 요소에 필요 노드 구현은 아래와 같이 데이터와 다음 노드에 대한..
배열 (Array) C++에서 사이즈 구하기 int arr[] = { 1, 2, 3, 4, 5, 6, 7 }; int n = sizeof(arr) / sizeof(arr[0]); // 7 1. 배열 회전 프로그램 기본적인 회전 알고리즘 구현 #include using namespace std; //왼쪽으로 한번 회전 void leftRotatebyOne(int arr[], int n){ int temp = arr[0], i; for(i = 0; i < n-1; i++){ arr[i] = arr[i+1]; } arr[i] = temp; } // d만큼 회전 void leftRotate(int arr[], int d, int n){ for(int i = 0; i < d; i++) leftRotatebyOne..
원문: 네이버 지식인 – 컴퓨터프로그래머 미래전망 언론에서 하는 말은 그대로 믿지 마세요. haaej 2012.06.14 00:33 우선 저는 현직 JSP, JAVA를 주력으로 하는 컴퓨터 프로그래머이고 그 외에 비주얼베이직과 PHP, C도 가능하며 경력은 11년차입니다. 언론에서 컴퓨터 프로그래머가 미래 유망직종이라는건 그저 ‘취직이 잘 되니까’ 얘기하는겁니다. 그런데, 취직이 왜 잘될까요? 그만큼 사람들이 기피하는 직종이기 때문에 사람이 항상 모자라는겁니다. 컴퓨터 프로그래머가 되겠다고 배우러 오는 사람들은 넘쳐납니다. 그러나, 이 쪽 방면의 현실을 깨닫고 나서는 전부 포기합니다. 그렇다면 이 쪽 방면의 현실은 어떠할까요? 1. 우리나라의 컴퓨터 프로그래머는 건설직 단순노동자로 인식됩니다. 프로그래머..
싱글턴 패턴 (Singleton Pattern) 해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴. 클래스에서 자신의 단 하나뿐인 인스턴스를 관리하도록 만든다. 다른 어떤클래스에서도 자신의 인스턴스를 추가로 만들지 못하도록 해야한다. 싱글턴 클래스 다이어그램 고전적인 싱글턴 패턴 구현법 (어떤 문제가 있을까?) public class Singleton { private static Singleton uniqueInstance; private Singleton() {} public static Singleton getInstance() { if (uniqueInstance == null) { uniqueInstance = new Singleton(); ..
- Total
- Today
- Yesterday