본문 바로가기

프로그래밍 언어 (プログラミング言語)

자바에서 메모리를 절약하는 방법!! 메모리 누수(Leak) 자바에서 메모리 누수는 더 이상 사용되지 않는 객체들이 GC(가비지 컬렉션)에 의해 소멸되지 않고 누적되는 현상입니다. 가비지 컬렉션의 소멸 대상이 되려면 다른 Reference 변수에서 참조하고 있지 않아야 합니다. 1. 무의미하게 Wrapper Class를 만들지 말자!! -> 예를 들어, int는 4byte이나 Integer는 20byte이다. 기본 자료형보다 Wrapper Class의 크기가 훨씬 크다. 고로, 무의미하게 Wrapper Class를 남발하지는 말자! ( Wrapper 클래스보다는 기본형 배열(레퍼번스 변수)을 사용하자!!!) LinkedList l = new LinkedList(); // 메모리 많이 잡아 먹음. LinkedList l = new Linked.. 더보기
JAVA - 프로그래머는 객체 삭제가 불가능하다!!! 속지말자!!! 자바의 철학은 모든 것을 레퍼런스 변수로 접근하게 하여서, 개발자의 메모리 상에서의 오류를 막는 것이다. 고로, 자바에서는 모~든 객체는 GC(Garbage Collector)에 의해 삭제가 된다. 간혹가다가, 문서에서 "객체를 삭제"라는 글을 읽을 떄가 있는데, 이는 레퍼런스 변수를 삭제하여, 더 이상 해당 객체를 가리키지 않게 null로 만든다 라는 뜻이다. 고러, 만약 자바로 코딩을 하다가 메모리를 신경 써야 한다면, 레퍼변스 변수가 더 이상 그 객체를 가리키지 못하게 하는 것이 중요하다. 더보기
Vector vs ArrayList vs Linkedlist의 차이점!!! Vector란 무엇인가? Vector 클래스 java.util.Vector List 인터페이스를 구현한 클래스 객체들을 삽입, 삭제, 검색 할 수 있는 콘테이너 클래스 배열의 길이 제한 단점을 극복 아이템을 맨 마지막이나 중간에 삽입할 수 있음 객체수가 많아지면 자동으로 크기 조절 Vector 내부구조 add() 메소드로 요소 삽입 get() 메소드로 요소 검색 String, Integer, Person 등 다양한 타입의 객체 삽입 가능 요소들은 인덱스로 관리 (0부터 시작) -> 배열로 구현 Vector 주요 메소드 add(E e) : 벡터 맨 뒤에 요소추가 add(int index, E e) : 지정된 인덱스에 지정된 객체 추가 capacity() : 벡터 현재 용량 반환 addAll(c) : c가 .. 더보기
JAVA에서의 Queue 사용법( C++과 다른 점이 있으므로 주의!!) 잠깐 덱에 관해서도 살짝 언급하고 가자면, 큐는 단방향으로 요소(데이터)가 들어가는 방향과 나오는 방향이 다르다. 반면 덱은 Double-ended Queue 의 줄임말인데, 말 그대로 양방향의 지점이 있는 큐다. 설명으로는 어려울테니 컨셉이 어떤지 그림으로 보고가도록 하자. 그리고 이 문제를 풀 떄 중요한 점이 있다. 물론 대개는 구현해서 풀겠지만, 라이브러리를 사용한다는 가정하에 C++같은 경우 queue 라이브러리에는 가장 맨 뒤에 있는 요소를 반환하는 back() 메소드가 있지만, Java의 경우는 Queue 인터페이스로 선언하여 라이브러리를 사용할 경우 back() 과 같은 역할을 하는 메소드는 없다. (맨 앞의 원소를 반환하는 것은 peek() 메소드가 있다.) 즉, 예로들어 아래와 같이 쓸 .. 더보기
StringBuilder Class ex) for( ....){ System.out.println(...); } -> 위와 같은 코드가 있다고 하자. 포스틍을 한 적이 있지만, System.out.print()는 cpu와 메모리를 많이 잡아 먹는다. 고로, 1번의 호출이 아니라, System.out.print()를 반복적으로 호출하게 되면, 실행 속도와 메모리 성능이 현전히 낮아진다. 이떄, StringBuilder Class를 사용하자. ex) StringBuilder sb = new StringBuilder(); sb.append("_").append("\n); ,,, sb.append("_").append("\n); ,,,,, sb.append("_").append("\n); System.out.print(sb); // 1번만 Sys.. 더보기
C++ - Stack(STL) 목차 1. 스택(Stack)이란? 2. 스택 헤더 파일 3. 스택 기본 함수 1. 스택이란? 스택(Stack)은 대표적인 LIFO(Last In First Out) 구조입니다. 따라서 제일 마지막에 넣은 데이터가 처음으로 빠져나오는 것을 볼 수 있습니다. 스택의 기본함수에는 push, pop, empty, top, swap 등이 있습니다. 2. 스택 헤더 파일 stack STL을 사용하기 위해서는#include 헤더파일을 포함해야 합니다 . stack 이름 ; 으로 stack을 선언합니다. #include stack stack; 3. 스택 기본 함수 ▷ 스택에 데이터 추가하기 스택이름.push(데이터) 형태로 데이터를 추가합니다. stack.push(element) ▷ 스택에 데이터 삭제하기 스택이름.p.. 더보기
JAVA - Stack Class Stack이란? 자료 구조 중 하나인 Stack의 사전적 정의는 '쌓다', '더미'입니다. 상자에 물건을 쌓아 올리듯이 데이터를 쌓는 자료 구조라고 할 수 있습니다. Stack의 가장 큰 특징은 나중에 들어간 것이 먼저 나오는 (Last In First Out)의 형태를 띈다는 것입니다. 이 방식을 가진 자료구조인 Stack을 활용하여 다양한 문제를 해결할 수 있습니다. 자바에서 Stack은 java.util.Stack을 import하면 바로 사용할 수 있습니다. Stack의 특징 1. 먼저 들어간 자료가 나중에 나옴 LIFO(Last In First Out) 구조 2. 시스템 해킹에서 버퍼오버플로우 취약점을 이용한 공격을 할 때 스택 메모리의 영역에서 함 3. 인터럽트처리, 수식의 계산, 서브루틴의 복.. 더보기
C++에서 문자열을 Parsing하는 다양한 방법 1. substr()으로 문자열 자르기 substr()은 문자열의 Index에서 원하는 길이의 문자열을 잘라서 string으로 리턴합니다. substr의 Syntax는 아래와 같습니다. 인자로 index와 길이를 받고 string을 리턴합니다. string substr (size_t pos = 0, size_t len = npos) const; 아래 예제는 문자열의 특정 부분을 자르는 코드입니다. substr(0, 5)는 Index 0에서 시작하는 5개의 문자를 잘라서 string으로 리턴합니다. substr(6, 5)는 Index 6에서 길이 5의 문자열을 잘라서 리턴합니다. #include #include int main () { std::string str = "Hello World, C++"; s.. 더보기