목록분류 전체보기 (32)
dev-sohee 님의 블로그

혹시 컴퓨터가 어떻게 인간의 언어를 알아듣고 출력하는지 궁금하지 않으신가요? 컴퓨터는 분명 '0'과 '1'만 알아 듣는다고 했는데 개발자는 영어로 개발을 하고 화면에는 영어, 중국어, 한국어 등 다양한 언어들이 출력되는 프로그램을 만들 수 있습니다. 이것을 가능하게 하는 것이 바로 문자 인코딩입니다.오늘은 문자 인코딩 방식 중 ASCII, 유니코드, UTF-8, UTF-16에 대해 알아보겠습니다.* ASCII(American Standard Code for Information Interchange)* 유니코드* UTF-8(Universal Coded Character Set Transformation Format 8-bit)* UTF-16(16-bit Unicode Transformation Forma..

malloc()과 free()는 런타임 도중에 사용할 메모리 공간 할당과 해제를 위한 즉, 동적 메모리 사용을 위한 C언어의 대표적인 함수들입니다. C언어로 개발을 해보신 분들이라면 이 함수들을 봤을 때 인상을 찡그리실 수도 있습니다.malloc()을 사용하는 순간 시스템은 사용하지 않는 메모리를 할당하고 이에 대한 포인터를 리턴합니다. 이것은 프로그램의 실행 지체를 유발하기 때문에 조심해서 사용해야 하는 아주 까다로운 녀석입니다. 그리고 malloc()으로 메모리를 할당한 후에 free()로 해제를 안하면 메모리 누수, 성능 저하의 문제가 발생할 수 있으므로 free()도 꼭 잊지말고 해줘야 합니다. 하지만 자바에서는 이런 고민을 할 필요가 없습니다. 자바의 가비지 컬렉터가 알아서 해주니까요. 이 글..

인터프리터는 바이트 코드를 한줄 한줄 읽으면서 OS가 실행할 수 있도록 기계어로 번역을 하는 방식입니다. 초기 JVM은 인터프리터 방식만 이용하여 한줄 한줄 읽기 때문에 실행속도가 느리다는 단점이 있었지만 JIT 컴파일러 방식을 도입해 속도를 보완했습니다. 오늘은 JIT 컴파일러가 무엇인지, 어떻게 JVM의 속도를 개선했다는 것인지 자세히 알아보겠습니다.* 인터프리터 * 컴파일러* JIT-Compiler(Just-In-Time) # 인터프리터와 컴파일러 컴파일러는 소스코드 전체를 컴퓨터 프로세서가 실행할 수 있도록 바로 기계어로 변환합니다. 인터프리터는 고레벨 언어를 중간 코드(intermediate code)로 변환하고 이를 각 행마다 실행합니다.파이썬은 인터프리트 언어이고 C, C++는 컴파일 언어..

HTML은 웹페이지의 구조를 정의하는 웹을 위한 마크업 언어입니다. 모든 웹사이트의 가장 기본적인 구성 요소이기 때문에 웹 개발자로서 경력을 쌓고 싶다면 반드시 배워야 할 언어이기도 합니다. 이 글에서는 HTML, CSS, Javascript가 무엇인지와 이 셋의 관계에 대해서 다룰 예정입니다.* HTML* CSS* Javascript # HTML(Hyper Text Markup Language) : 웹페이지의 구조를 정의하는 웹을 위한 마크업 언어Hyper Text는 직역하면 'Text를 뛰어넘다'는 의미입니다. 그렇다면 Text를 뛰어넘는다는 건 또 무슨 뜻이야? 하는 분들도 계시겠지만 우리는 이미 Hyper Text를일상에서 너무나 자연스럽게 접하고 있습니다. 지금 이 글을 보고 있다는 것 자체가..

혹시 개발자가 코드를 짜는 모습을 상상해본 적이 있으신가요?개발을 경험해본 적이 없는 사람이라면 머릿속에 있는 것들을 타자를 치면서 바로 실현시키는 개발자의 모습을 상상하실 수도 있습니다. 하지만 실제 개발 과정에서는 저렇게 결과물을 뚝딱 만들어낼 수 없습니다.어떤 시스템을 개발하든 간에 일반적인 절차라는 것이 있습니다. 일반적인 절차는 다음과 같습니다.1. 분석- 시스템을 만들어 달라고 한 사람들에게 어떻게 개발하기를 원하는지 물어보며 요구사항을 분석하는 단계입니다. 2. 설계- 분석 단계에서 만든 대략적인 그림을 프로그램으로 만들 수 있도록 설계하는 단계입니다. 이 단계에서 어떤 클래스, 어떤 메서드, 어떤 변수를 만들 것인지 등의 세부적인 것들을 정리합니다.예시) 시퀀스다이어그램, ERD, 클래스 ..

이 글에서는 자바의 핵심이자 두뇌인 JVM에 대해 깊이 알아보겠습니다. * 클래스 로더* 실행 엔진* 메모리 영역 # 클래스 로더자바는 동적 로드, 즉 컴파일 타임이 아니라 런타임(바이트 코드를 실행할 때)에 클래스를 로드하고 링크한다는 특징이 있습니다. 이 동적 로드를 담당하는 부분이 JVM의 클래스 로더입니다. 정리하자면, 클래스 로더는 런타임 중에 JVM의 메서드 영역에 동적으로 Java 클래스를 로드하는 역할을 합니다.**바이트코드란? : 자바 소스 코드를 컴파일한 결과로 생성되는 중간 코드. 자바 소스 파일(.java)을 자바 컴파일러(javac)에 의해 바이트코드(.class)로 변환한다. 사람이 읽기 쉽도록 쓰인 소스코드와 비교했을 때, 바이트 코드가 덜 추상적이며, 더 간결하고, 더 컴퓨터..

1990년대 중반, 인터넷의 급격한 성장으로 다양한 하드웨어에서 동일하게 동작하는 소프트웨어가 필요했습니다.당시 많은 프로그래밍 언어는 특정 플랫폼에 종속적이어서, 여러 기기에서 동일한 소프트웨어를 실행하는 것이 어려웠습니다. 이때 한 번 작성한 코드를 다양한 플랫폼에서 실행할 수 있 자바가 개발되었고 지속적인 발전을 거듭하며 다양한 분야에서 널리 사용되는 주요 프로그래밍 언어 중 하나가 되었습니다. 이 글에서는 객체지향의 4대 특징, 클래스 5원칙과 디자인 패턴을 알아보겠습니다. * 객체 지향의 4대 특징* 클래스의 5원칙* GoF 디자인 패턴 3가지 # 클래스(Class)객체 지향 프로그래밍의 핵심 개념으로, 객체를 생성하기 위한 규격을 뜻합니다. 클래스는 특정 타입의 객체를 만들어내는 설계 도면의 ..

저는 첫 직장의 첫 프로젝트에서 C언어로 개발을 시작했습니다. 반복문이나 연산이 많은 프로그램에서 C언어의 저수준 접근 방식은 코드 최적화에 유리하여 고성능 애플리케이션을 작성할 수 있다는 장점이 있고 메모리 관리나 포인터 같은 개념을 깊이 이해하는 데 큰 도움이 되었습니다. 그러나 시간이 지나면서 소프트웨어 개발의 복잡성이 증가할수록, 대규모 소프트웨어 개발에 효율적인 프로그래밍 언어의 필요성을 느꼈고 자바를 공부하기 시작했습니다. 자바의 구동원리에 대해 공부하면서 JVM(Java Virtual Machine)에 대해 알게 되었습니다. 처음에는 단순히 자바 프로그램을 실행하기 위한 환경으로만 생각했지만, 점차 그 내부 구조와 동작 원리에 대해 더 깊이 이해하고 싶어졌습니다. JVM은 자바 프로그램을 ..