Java

    Collection Framework 이란?

    Collection Framework? 데이터들을 다루는 클래스들에 대한 설계를 표준화하여 모아둔 것 Java를 공부하다보면 "Collection Framework"라는 용어를 접하게 됩니다. 위의 정의처럼 Collection Framework는 "데이터들을 다루는 클래스들에 대한 설계를 표준화하여 모아둔 것" 입니다. 자료구조 강의시간에 배우는 C++의 STL과 비슷한 것이라고 생각하셔도 됩니다. 우리가 Stack, Queue, Linked-List와 같은 자료구조를 공부할 때에는 각 자료구조를 직접 구현해서 사용합니다. 자료구조를 학습하는 측면에서 이는 분명 좋은 공부입니다. 하지만 이 맥락을 우리가 실제로 개발하는 환경 또는 빠른 시간 안에 주어진 문제를 해결해야하는 코딩테스트와 같은 환경에 가져올..

    콘솔 상에서 비밀번호 처리하기

    이번 시간에는 java로 프로그램을 작성하면서 비밀번호를 입력받고 이를 처리하는 로직을 구성할 때 사용자가 입력하는 비밀번호가 보이지 않도록 처리하는 방법에 대해서 알아보도록 하겠습니다. 이러한 주제는 다음과 같은 질문에서 시작 됩니다. 다른 앱이나 웹 서비스처럼 Console 창에서도 사용자가 입력하는 비밀번호가 보이지 않도록 처리하는 방법이 없을까? 지금 우리가 구현하려는 것을 가리켜 "Password Masking" 이라고 표현합니다. 말 그대로 사용자가 입력하는 내용을 내부적으로는 유지하되, 외부적으로(console) 상에는 노출시키지 않음으로서 보안에 대한 안전성을 높이려고 하는 것 입니다. 그래서 가장 먼저 생각해볼 수 있는 내용은 다음과 같습니다. Scanner에 masking을 지원하는 옵..

    gson 라이브러리를 사용한 파일 입출력 기능 구현하기

    프로젝트에 파일 입출력 기능을 추가하자! 이전에 살펴본 todo-list-console 프로젝트에서 가장 아쉬운 점은 정보가 메모리 상에서만 저장되기 때문에 프로그램이 종료되면 실행 간에 작업했던 내용을 모두 잃는다는 점 입니다. 그래서 이러한 문제점을 해결하기 위해서 파일 입출력을 사용하여 프로그램을 실행하는 중에 작업한 내용을 파일 형태로 저장하고, 프로그램을 재실행했을 때 이 파일을 읽어서 원래 작업 내용을 불러오는 기능을 구현해보겠습니다. 작업한 내용을 파일 형태로 저장한다고 하면 일반적으로 가장 쉽게 생각할 수 있는 방법이 txt 파일로 작업한 내용을 저장하는 것 입니다. 그것이 이전에 C언어 파일 입출력을 공부하면서 경험해본 방법이기도 하고, 파일 입출력에서 가장 기본적으로 다루는 것이 txt..

    JVM의 메모리 구조

    java로 작성된 프로그램이 실행되면 JVM은 OS로부터 memory 공간을 할당받고, 이 할당받은 공간을 용도에 따라서 여러 영역으로 나눠서 관리하게 된다. 여기서 주목해서 공부해봐야할 부분은 3가지 영역인데 그 세 가지 영역은 아래와 같다. 1. method area 2. heap 3. call stack or execution stack method area 프로그램 실행 중 사용되는 class에 대한 정보를 저장하는 위치 프로그램 실행 중 특정 class가 사용되면 JVM은 해당 class의 ".class" file을 분석하여 class에 대한 정보를 해당 영역에 저장한다. 그리고 이 때 해당 class의 class variable도 이 위치에 저장된다. heap 프로그램 실행 중 생성되는 ins..

    Variable 과 Method

    변수(variable)는 다음 세 가지 종류가 존재함을 기억하도록 하자. 1. Class variable 2. Instance variable 3. Local variable 다른 프로그래밍 언어들과 마찬가지로 변수의 종류를 결정짓는 요소는 "변수가 선언되는 위치" 이다. 이 각각의 변수들을 구분하고자 할 때에는 다음의 기준을 적용해서 구분하면 된다. member variable을 제외한 나머지 변수들 모두 local variable 이며, member variable 중 static이 붙은 것은 class variable, 붙지 않은 것은 instance variable에 해당 아래의 예시 코드를 보면 위의 기준을 통해서 각 변수들을 어떻게 구분할 수 있는 지 이해할 수 있을 것이다. class Fis..

    Class와 Object

    Class Object를 정의한 것 class는 위의 정의 그대로 "Object"를 정의한 것 이다. 실제로 Class는 Object의 정의를 바탕으로 Object를 생성하는 데 사용되며, Class를 통해서 생성된 각 객체들은 Class가 담고 있는 Object의 정의를 그대로 담게 된다. Object 실존하는 것, 사물 또는 개념 Object는 우리말로 "객체"라고 표현하며 실제로 존재하는 것을 가리켜 말한다. Object는 사물과 같이 실제로 그 형태가 존재하는 "유형의 객체"일 수 있고, 개념과 같이 형태가 존재하지는 않지만 실제로 존재하는 "무형의 객체"일 수도 있다. 프로그래밍에서 Object는 class에 정의된 내용대로 메모리에 생성된 것을 가리켜 말한다. Class와 Object의 관계?..

    OOP(Object Oriented Programming language) 개념

    컴퓨터 공학을 공부한다면 어렵지 않게 들을 수 있는 이 OOP라는 용어는 우리말로 "객체지향언어"로서 java가 가지는 핵심적인 기능 중 하나이다. java의 모든 내용들을 잘 이해하기 위해서는 이 OOP에 대한 이해가 대단히 중요하기 때문에 OOP의 개념에 대해 공부해야할 가치는 충분하다. OOP는 다음과 같은 아이디어에서 시작 되었다. 우리가 있는 실세계를 모델링하여 이와 굉장히 유사한 가상세계를 컴퓨터 속에서 구현할 수 없을까? 그리고 이 과정에서 우리가 위치한 실세계를 다음과 같이 표현하였다. 우리가 위치한 실세계는 Object로 이뤄져 있으며, 세계에서 발생하는 모든 이벤트는 이 Object 간의 상호작용으로 발생한다. OOP가 가지는 장점은 다음과 같다. 1. 높은 코드 재사용성 2. 용이한 ..

    Java 에 대한 기본적인 정리

    Java 의 장점 1. 운영체제에 독립적 2. 객체지향 언어 3. 비교적 낮은 입문장벽 4. Garbage Collector 5. 네트워크와 분산처리 6. 멀티스레드 지원 7. Dynamic Loading 지원 운영체제에 독립적 java는 일종의 애뮬레이터인 JVM(= Java Virtual Machine)을 사용한다. 그렇기 때문에 java로 작성된 코드는 운영체제나 하드웨어가 아닌 JVM과만 통신이 이뤄지기 때문에 java 코드 관점에서는 운영체제나 하드웨어에 대한 차이 없이 동일한 java 코드를 사용할 수 있다. 운영체제가 해당 내용을 이해할 수 있도록 애플리케이션의 명령들을 변환하는 것은 JVM이 수행한다. 그렇기 때문에 java로 작성된 프로그램 자체는 운영체제에 독립적이지만, JVM은 운영체..

    Optional

    Optional이 지향하는 핵심적인 내용은 바로 "null"을 직접 다루지 말고 Optional 객체에 넣어서 관리하자! 라는 부분이다. 즉, null을 직접 다루는 것이 아니라 Optional Object라는 중간다리를 통해 관리함으로서 NPE(= NullPointerException)의 발생가능성을 최대한 줄이겠다는 목적을 가지고 탄생한 것이라고 볼 수 있다. 여기서 NPE를 최대한 피하려고 하는 구체적인 이유는 개발하는 프로그램의 size가 커진 경우, NPE의 발생은 디버깅이 어렵기 때문이다. Optional Object를 통해서 Optional null value handling을 위해서 java 8부터 새롭게 추가된 개념 java에서는 null value 때문에 상당히 많은 수의 NPE(= N..

    enum

    enum 서로 관련성 있는 상수들을 모아서 심볼릭한 명칭의 집합으로 정의한 것 별도의 파일로 분리해서, 클래스 내부에, 클래스 외부에 정의하여 사용하는 것이 모두 가능함 그냥 열거하여 상수의 이름들을 적어내는 경우 → 열거된 순서대로 0부터 1씩 증가하는 형태로 값을 가지게 됨. ⇒ 이 때 ';'을 붙이지 않는 것이 포인트 출력하는 경우? → 할당된 상수 값이 아닌 심볼릭하게 지정된 상수명이 출력됨 함께 사용할 수 있는 관련 method 들도 존재함 - class의 개념이라고 볼 수 있음 values() - 열거된 모든 원소들을 배열에 담아서 순서대로 반환 ordinal() - 열거된 순서를 정수값으로 반환 (0부터 시작함) valueOf() - 매개변수로 주어진 String과 일치하는 이름을 가진 원소..