자바

[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] Object 클래스
※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 댓글로 알려주세요! [ 1 ] Object 클래스란? 자바에는 가장 기본적인 동작을 수행하는 클래스의 집합으로서 import하지 않고도 사용할 수 있는 java.lang 패키지가 있다. java.lang 패키지에는 모든 클래스의 최고 조상 클래스인 Object 클래스가 있으며, Object 클래스는 필드는 없고, 11개의 메소드로 구성되어 있다. 그 중 대표적인 메소드인 toString, equals, finalize, clone을 정리하고자 한다. [ 2 ] toString() toString() 메소드는 해당 인스턴스에 대한 정보를 문자열로 반환하는 메소드이다. 반환되는 문자열은 "class가 속해있는 패키지.class@객체식별자"이며,..

[Java] 다형성(Polymorphism)
※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 댓글로 알려주세요! [ 1 ] 다형성(Polymorphism)이란? 다형성에 대한 정의가 여러가지 글, 영상자료마다 다르고 다양해서 하나로 정의하기 어려웠다. 이에 필자가 찾은 모든 정의를 정리하고자 한다. (1) 하나의 타입에 실행결과가 각기 다른 여러 객체를 대입할 수 있는 것 (2) 하나의 객체가 여러가지 타입을 가질 수 있는 것 (3) 하나의 메소드나 클래스가 다양한 방법으로 동작하는 것 세 정의는 미묘하게 다르지만, 공통된 부분이 있다. 바로 "하나"의 무엇이 "여러가지, 다양한" 것을 할 수 있고, 될 수 있음을 나타내고 있다. 이 공통된 부분에 초점을 두고 다형성을 정리해보자. [ 2 ] 메소드의 다형성 하나의 메소드가 다양한 ..

[Java] 패키지(Package)
※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 댓글로 알려주세요! [ 1 ] 패키지란? 하나의 컴퓨터에는 같은 이름을 가진 2개의 파일이 공존할 수 없다. 즉, 내가 test.txt 파일을 작성해서 저장했다면, 그 내용이 다를지라도 또다른 test.txt 파일을 저장할 순 없는 것이다. 이러한 불편함을 해결해 준 것은 '폴더'였다. 우리는 카테고리를 설정하여 그에 상응하는 폴더를 생성하고, 그 폴더 내에는 비슷한 내용을 담은 수많은 파일들을 저장할 수 있게 되었다. 또한, 각자가 다른 폴더에 저장되어 있다면 같은 이름을 가진 파일도 공존할 수 있게 되었다. Java의 패키지도 폴더와 같은 역할을 한다. 비슷한 성격의 클래스들을 하나의 패키지에 모아 저장할 수 있는 것이다. 패키지를 활용..

[Java] 제네릭(Generic)
※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 댓글로 알려주세요! [ 1 ] 기본 개념 제네릭(Generic): 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법이다. C++에 익숙한 사람이라면 template가 떠오를 것이다(단, 역할은 비슷하지만, 차이점도 많다!) class Student { public T info; } Student s1 = new Student(); Student s2 = new Student(); 위의 가 Generic이다. Student라는 class를 정의하는 시점에서는 info의 DataType을 명시적으로 지정하지 않고 있다가, s1이라는 Student의 인스턴스를 Student으로 만들어낼 때 info가 String이라는 DataType을..