본문 바로가기

전체 글

(77)
[Java] StringBuffer와 StringBuilder 자바에서 String클래스는 불변객체이다. 불변객체란 한번 생성하면 내용이 변하지 않는다는 의미이다. 그래서 문자열끼리 + 연산을 하면 기존 문자열에 문자열이 연결되는 것이 아니라 새로운 문자열 객체가 생성된다. 반면 StringBuffer는 인스턴스를 생성할 때 버퍼의 크기를 정해주고 버퍼사이즈 내에서 문자열 변경이 가능하다. 하지만 버퍼를 벗어나는 정도로 문자열을 추가하면 내부적으로 배열의 길이를 늘여주는 작업을 하므로 그만큼의 오버헤드가 발생한다. 따라서 처음 생성 시에 버퍼의 크기를 넉넉하게 잡아주는 것이 바람직하다. StringBuffer는 equals()가 오버라이딩 되어 있지 않아 값에 의한 비교를 하지 않는지만 toString()은 오버라이딩 되어 있어 toString() 호출 시 인스턴스..
[JAVA] getBytes()와 String생성자로 인코딩 디코딩하기 String class에는 getBytes() 메서드를 사용해 문자열을 인코딩할 수 있다. 다만 플랫폼의 기본 charset에 없으면 변환 불가능하다. 문자열을 byte[]로 인코딩하면 디코딩할 때에도 같은 charset을 사용해 주어야 한다. 만약 다른 charset을 사용하면 외계어를 볼 수 있을 것이다. public class Test { public static void main(String[] args) throws UnsupportedEncodingException { String str = "가나다라마바사"; String decode = null; byte[] encode = null; encode = str.getBytes("UTF-8"); for (byte b : encode) { Sys..
[컴퓨터구조] 명령어 파이프라인 명령어 파이프라인(instruction pipeline)은 명령어를 읽어 순차적으로 실행하는 프로세서에 적용되는 기술로, 한 번에 하나의 명령어만 실행하는 것이 아니라 하나의 명령어가 실행되는 도중에 다른 명령어 실행을 시작하는 식으로 동시에 여러 개의 명령어를 실행하는 기법이다. (출처 : 위키백과) 명령어 파이프라인이란 명령어를 어떻게 동시에 실행할까? 위의 사진처럼 하나의 명령어가 처리되는 과정을 세분화해서 나눈다. 그리고 실행 명령어를 겹쳐서 명령어 인출 단계가 끝난 명령어는 더 이상 IF단계에 해당하는 부품을 사용하지 않으니 다음 명령어가 해당 부품을 사용하는 식으로 cpu사용량을 높이는 기법이다. 위와 같은 방식으로 명령어를 실행하면 Instruction4까지만 봐도 수행 시간은 clock8까..
getClass() getClass()는 Object클래스의 메서드로 자신이 속한 클래스의 Class 객체를 반환해 주는 메서드이다. Class 객체란 클래스 이름이 Class인 클래스로 만들어진 객체이며 클래스의 모든 정보를 담고 있다. (클래스당 1개만 존재한다.) 이 Class 객체는 생성자가 private로 되어 있기 때문에 우리가 사용하는 것이 아니라 javac에 의해 컴파일된 클래스 파일이 클래스 로더에 의해 메모리에 올라갈 때 자동으로 생성된다. 클래스 로더란 실행 시에 필요한 클래스를 동적으로 메모리에 로드하는 역할을 한다. 먼저 기존에 생성된 클래스 객체가 메모리에 존재하는지 확인하고 없으면 클래스 패스에 지정된 경로를 따라서 클래스 파일을 찾는다. 못 찾으면 ClassNotFoundException이 발생..