
프로세스란 간단히 말해서 실행 중인 프로그램이다. 프로그램을 실행하면 OS로부터 실행에 필요한 자원을 할당 받아 프로세스가 됨. 프로세스는 프로그램을 수행하는데 필요한 데이터와 메모리등의 자원 그리고 쓰레드로 구성되어 있으며 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것이 바로 쓰레드이다. 그래서 모든 프로세스에는 최소한 하나 이상의 쓰레드가 존재하며, 둘 이상의 쓰레드를 가진 프로세스를 멀티 쓰레드 프로세스라고 한다. 하나의 프로세스가 가질 수 있는 쓰레드 개수는 제한되어 있지않지만 메모리 공간 때문에 적절한 갯수를 사용해야한다. 멀티태스킹과 멀티쓰레딩 윈도우나 유닉스같은 대부분의 OS는 멀티태스킹을 지원하기 때문에 여러 개의 프로세스가 동시에 실행될 수 있다. 이와 마찬가지로 멀티쓰레딩은 하나..
열거형이란? JDK1.5부터 새로 추가된 기능인데 C언어의 열거형보다 더 향상된 것으로 열거형이 갖는 값뿐만 아니라 타입까지 관리하기 때문에 보다 논리적인 오류를 줄일 수 있다. class Card { static final int CLOVER = 0; static final int HEART = 1; static final int DIAMOND = 2; static final int SPADE = 3; static final int TWO = 0; static final int THREE = 1; static final int FOUR = 2; final int kind; final int num; } ↓ class Card { enum Kind { CLOVER, HEART, DIAMOND, SPADE..
먼저 Vector와 ArrayList에 관한 기본적인 지식이 부족한 사람들은 이전 글인 컬렉션부터 보고 오면 될 것 같다. https://smujihoon.tistory.com/155 다시 하자 기초! 컬렉션 프레임워크 컬렉션 프레임웍 데이터 군을 저장하는 클래스들을 표준화한 설계를 뜻한다. 다수의 데이터, 즉 데이터 그룹을, 프레임웍은 표준화된 프로그래밍 방식을 의미한다. JDK1.2 이전까진 Vector, HashTable, Properties.. smujihoon.tistory.com 동기화란? 동기화는 쓰레드가 하나의 자원을 놓고 싸우지 말고 락을 가진 쓰레드부터 차례대로 그 자원을 쓰고 다음 쓰레드에게 락과 함께 자원을 반납하는 것을 말합니다. 주의할점은 동기화를 안해도 되는 부분을 괜히 동기화..
지네릭스 (Generics) JDK1.5에서 처음 도입된 지네릭스는 JDK1.8부터 도입된 람다식만큼 큰 변화였다. 그 당시만 해도 지네릭스는 선택적으로 사용하는 경우가 많았지만 이제는 지네릭스를 모르고는 Java API문서조차 제대로 보기 어려울 만큼 중요한 위치를 차지 지네릭스란? 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크를 해주는 기능이다. 객체의 타입 안전성을 높이고 형변환의 번거로움이 줄어든다. 안정성을 높인다는 것은 의도하지 않은 타입의 객체가 저장되는 것을 막고, 저장된 객체를 꺼내올 때 원래의 타입과 다른 타입으로 잘못 형변환되어 발생할 수 있는 오류를 줄여준다는 뜻이다. 예를 들어 ArrayList는 다양한 객체를 담을 수 있지만 보통 한 종류의 객체를 ..

컬렉션 프레임웍 데이터 군을 저장하는 클래스들을 표준화한 설계를 뜻한다. 다수의 데이터, 즉 데이터 그룹을, 프레임웍은 표준화된 프로그래밍 방식을 의미한다. JDK1.2 이전까진 Vector, HashTable, Properties와 같은 컬렉션 클래스, 다수의 데이터를 저장할 수 있는 클래스들을 서로 다른 각자의 방식으로 처리해야 했으나, JDK1.2부터 컬렉션 프레임웍이 등장하면서 다양한 종류의 컬렉션 클래스가 추가되고 모든 컬렉션 클래스를 표준화된 방식으로 다룰 수 있도록 체계화되었다. 컬렉션 프레임웍의 핵심 인터페이스 크게 3가지 타입이 존재한다. List, Set, Map으로 말이다. 그리고 인터페이스 List와 Set의 공통된 부분을 다시 뽑아서 새로운 인터페이스인 Collection을 추가로..

그동안 import문 없이 String클래스나 System클래스를 사용할 수 있었던 것은 바로 java.lang에 속한 클래스들 였기 때문이다. 이 패키지에서 자주 사용되는 몇 가지만 골라서 자세히 보자 1. Object클래스 모든 클래스의 최고 조상이기 때문에 Object클래스의 멤버들은 모든 클래스에서 바로 사용 가능하다. Object클래스는 멤버변수는 없고 오직 11개의 메서드로만 구성되어 있다. 우선 이 중에서 중요한 것만 보도록 하자 1-1 equals(Object obj) 매개변수로 객체의 참조변수를 받아서 비교하여 그 결과를 boolean값으로 알려주는 역할을 한다. public static void main(String[] args){ Value v1 = new Value(10); Valu..
프로그램 오류 프로그램이 실행 중 어떤 원인에 의해서 오작동을 하거나 비정상적으로 종료되는 경우가 있다. 이를 프로그램 에러 또는 오류라고 한다. 이를 발생시점에 따라 '컴파일 에러'와 '런타임 에러'로 나눌 수 있다. 그리고 실행은 잘 되지만 창고의 재고가 음수가 된다던가, 게임에서 비행기가 총알을 맞아도 죽지 않는 경우가 있다. 컴파일 에러 - 컴파일 시에 발생하는 에러 런타임 에러 - 실행 시에 발생하는 에러 논리적 에러 - 실행은 되지만, 의도와 다르게 동작하는 것 런타임 에러에서 발생 되는 오류를 크게 2가지로 생각 할 수 있다. 메모리 부족이나 스택오버플로우와 같은 일단 발생하면 복수할 수 없는 심각한 것을 에러라고 하며 발생하더라도 수습될 수 있는 비교적 덜 심각한 것은 예외라고 표현한다. ..

추상클래스 클래스를 설계도에 비유하자면 추상 클래스는 미완성 설계도에 비유할 수 있다. 미완성 뜻 그대로 완성되지 못한 채로 남겨진 설계도를 말한다. 미완성 설계도로 완성된 제품을 만들 수 없듯이 추상클래스로 인스턴스를 생성할 수 없다. 그래서 추상클래스는 상속을 통해서 자손클래스에 의해서만 완성될 수 있다. 추상클래스 자체로는 클래스의 역할을 다 못하지만, 새로운 클래스를 작성하는데 있어서 바탕이 되는 조상클래스로서 중요한 의미를 갖는다. 새로운 클래스를 정의 할 때 아무것도 없는 상태에서 시작하는 것보다는 완전하지는 못하더라도 어느정도 틀을 갖춘 상태에서 시작하는 것이 나을 것이다. 추상클래스는 키워드 abstract를 붙이기만 하면 된다. ex) abstract class 클래스 이름{ ... } ..