Programming/Java

    [Java] 그래프 표현하기 - 인접 리스트

    ※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 반드시 댓글로 알려주세요! [ 1 ] 그래프 그래프란 연결되어 있는 원소간의 관계를 표현하는 자료구조이다. 그래프는 연결할 객체를 나타내는 정점(Vertex)과 정점들을 연결하는 간선(Edge)의 집합으로 구성된다. 그래프는 다음과 같이 정의할 수 있다. G = (V, E) [ 2 ] 인접 리스트로 그래프 표현하기 Java로 그래프를 표현하는 방법에는 대표적으로 세 가지가 있다. 첫 번째는 정수 배열 기반으로 에지 리스트를 나타낼 수 있고, 두 번째로는 2차원 배열을 기반으로 인접 행렬을 나타낼 수도 있다. 주로 사용되는 방법은 ArrayList를 이용해 인접 리스트로 그래프를 표현하는 방법이다. (1) 가중치가 없는 무방향 그래프 (단,..

    [Java] Set Interface - HashSet

    ※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 댓글로 알려주세요! Java의 Set 인터페이스는 중복된 요소를 저장하지 않는 컬렉션이며, Set 인터페이스를 구현한 대표적인 클래스로는 HashSet이 있다. [ 1 ] HashSet HashSet은 내부적으로 HashMap을 이용해서 만들었으며, 해시 테이블 관련 내용은 해당 게시물을 참고하자. HashSet에 새로운 요소를 추가할 때에는 add() 나 addAll()을 사용하는데, 만약 set에 저장되어 있는 요소와 같은 요소를 저장하려고 시도하면 해당 메서드는 false를 반환하며 중복된 요소를 저장하지 않는다. List 인터페이스와 달리 HashSet은 내부적으로 HashMap을 이용하고 있어 저장순서를 유지하지 않으므로 저장순서를..

    [Java] 스택(Stack)과, 큐(Queue)

    ※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 댓글로 알려주세요! Stack과 Queue는 자료구조의 한 종류이다. Stack은 마지막에 저장한 데이터를 가장 먼저 꺼내는 LIFO(Last In First Out)구조로 되어 있고, Queue는 처음에 저장한 데이터를 가장 먼저 꺼내는 FIFO(First In First Out)구조로 되어 있다. 자바는 Stack과 Queue를 제공하고 있으며 Stack은 Vector를 상속받는 클래스이고, Queue는 Collection을 상속받는 인터페이스이다. [ 1 ] Stack 클래스 Stack은 마지막에 저장한 데이터를 가장 먼저 꺼내는 구조이므로 ArrayList와 같은 배열기반의 컬렉션 클래스로 구현하는 것이 적합하다. 배열에 순차적으로 ..

    [Java] JVM의 메모리 구조(Runtime Data Area)

    ※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 댓글로 알려주세요! JVM의 메모리 구조를 살펴보기 전에 자바 프로그램의 실행 단계부터 간략히 알아보자. (1) 자바 컴파일러에 의해 자바 소스 파일(.java)이 바이트 코드(.class)로 변환된다. (2) JVM은 바이트 코드(.class)를 읽어 해당 프로그램을 실행한다. (3) 프로그램이 실행되면, JVM은 시스템으로부터 프로그램 수행에 필요한 메모리를 할당받는다. (4) JVM은 할당받은 메모리를 용도에 따라 여러 영역으로 나누어 관리하는데, 3가지 주요 영역으로 Method Area, Call stack, heap이 있다. [ 1 ] Method Area 프로그램 실행 중 어떤 클래스가 호출되면(사용되면), JVM은 .class..

    [Java] 클래스, 객체, 인스턴스의 차이 및 객체 배열

    ※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 댓글로 알려주세요! [ 1 ] 클래스, 객체, 인스턴스 - 클래스 : 객체를 만들어내기 위해 정의해 놓은 것. 즉, 객체의 설계도 - 객체 : 소프트웨어 세계에 구현할 대상이자 클래스에 선언된 모양대로 생성된 실체이다. 객체는 속성과 기능이라는 구성 요소로 이루어지며 일반적으로 속성은 멤버변수, 기능은 메서드라고 한다. - 인스턴스 : 클래스로부터 객체를 만드는 과정을 '클래스의 인스턴스화'라고 하며 어떤 클래스로부터 만들어진 객체를 인스턴스라고 한다. [ 2 ] 객체와 인스턴스 그렇다면 객체와 인스턴스는 같은 것인가? 결론부터 말하자면 객체와 인스턴스는 같은 의미이면서도 차이가 존재한다. 객체는 '모든 인스턴스'를 대표하는 포괄적인 의미를..

    [Java] JVM, Java 환경변수 설정(Mac, 기본 zsh 쉘)

    ※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 댓글로 알려주세요! [ 1 ] JVM이란? JVM이란 Java Virtual Machine을 줄인 것으로 'Java를 실행하기 위한 가상 기계'이다. - Java의 정석(남궁성) 컴퓨터의 성능이 향상됨에 따라 많은 하드웨어들이 '소프트웨어화'되어 컴퓨터 속으로 들어오고 있다. 그 예시로 TV를 소프트웨어화한 '윈도우 미디어 플레이어' 등이 있으며 우리는 이처럼 소프트웨어로 구현된 하드웨어를 '가상 기계(Virtual Machine)'라고 한다. JVM은 결국 Java를 실행하는 '가상 컴퓨터'이며, 이는 실제 컴퓨터(하드웨어)가 아닌 소프트웨어로 구현된 컴퓨터를 의미한다. 즉, 컴퓨터(하드웨어) 속의 Java를 실행하는 컴퓨터(소프트웨어)가..

    [Java] List Interface

    ※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 댓글로 알려주세요! [ 1 ] List Interface List Interface란 선형 자료구조로서 순서가 있는 데이터를 저장하기 위해 만들어진 인터페이스이다. 보통 같은 종류의 데이터를 저장할 때 int[] arr = new int[10] 와 같은 '배열'을 활용하지만, 이처럼 선언한 배열은 10개의 데이터만 저장할 수 있다. 만약 할당된 범위를 넘어설 경우 IndexOutofBoundsException 에러가 발생한다. List interface 는 '동적 크기'를 가지므로 배열의 단점을 보완할 수 있고, '중복을 허용'하고 '저장순서가 유지'된다는 특징도 있다. List interface 의 대표적인 메소드는 다음과 같다. 메소드 ..

    [Java] 컬렉션 프레임워크

    ※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 댓글로 알려주세요! [ 1 ] 컬렉션 프레임워크란? 컬렉션 프레임워크란 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합이다. 즉, 데이터를 저장하는 자료구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현한 것을 의미한다. 자바 컬렉션 프레임워크는 Interface로 구현된다. [ 2 ] 구조 컬렉션 프레임워크에는 Collection 인터페이스를 상속받는 List, Set, Queue 가 있고, Collection 을 상속받지 않는 Map 이 있다. 둘의 큰 차이는 Iterable 인터페이스를 상속받냐, 상속받지 않냐의 차이인데 Iterable 인터페이스를 상속받은 Collection 인터페이스..