Language/Java

Language/Java

Java #8. 컬렉션 프레임웍(Collections Framework) (2) - Stack과 Queue, Iterator, Arrays

Stack과 Queue 스택(Stack)은 마지막에 저장한 데이터를 가장 먼저 꺼내게 되는 LIFO(Last In First Out)구조로 되어 있고, 큐(Queue)는 처음에 저장한 데이터를 가장 먼저 꺼내게 되는 FIFO(First In First Out)구조로 되어있다. 1. 순차적으로 데이터를 추가하고 삭제하는 스택에는 ArrayList와 같은 배열기반의 컬렉션 클래스가 적합하다. 2. 큐는 데이터의 추가/삭제가 쉬운 LinkedList로 구현하는것이 적절하다. - ArrayList와 같은 배열기반의 클래스로 구현하게 되면, 데이터를 꺼낼 때 마다 빈 공간을 채우기 위해 데이터의 복사가 발생하기 때문이다. import java.util.LinkedList; import java.util.Queue..

Language/Java

Java #8. 컬렉션 프레임웍(Collections Framework) (1) - 컬렉션 프레임웍, ArrayList, LinkedList

컬렉션 프레임웍(Collections Framework) 컬렉션 프레임웍이란, '데이터 군을 저장하는 클래스들을 표준화한 설계'를 뜻한다. 컬렉션은 다수의 데이터, 즉 데이터 그룹을, 프레임웍은 표준화된 프로그래밍 방식을 의미한다. 컬렉션 프레임웍은 컬렉션, 다수의 데이터를 다루는 데 필요한 다양하고 풍부한 클래스들을 제공하기 때문에 프로그래머의 짐을 상당히 덜어 주고 있으며, 또한 인터페이스와 다형성을 이용한 객체지향적 설계를 통해 표준화되어 있기 때문에 사용법을 익히기에도 편리하고 재사용성이 높은 코드를 작성할 수 있다는 장점이 있다. 컬렉션 프레임웍의 핵심 인터페이스 컬렉션 프레임웍에서는 컬렉션데이터 그룹을 크게 3가지 타입이 존재한다고 인식하고 각 컬렉션을 다루는데 필요한 기능을 가진 3개의 인터..

Language/Java

Java #7. java.lang패키지와 유용한 클래스 (3) - 유용한 클래스

java.util.Objects클래스 Object클래스의 보조 클래스로 모든 메소드가 static이다. 객체의 비교나 널 체크(null check)에 유용하다. isNull() isNull()은 해당 객체가 널인지 확인해서 null이면 true를, 아니면 false를 반환한다. nonNull()은 isNull()과 정반대의 일을 한다. static boolean isNull(Object obj) static boolean nonNull(Object obj) requireNonNull() requireNonNull()은 해당 객체가 널이 아니여야 하는 경우에 사용한다. 만일 객체가 널이면, NullPointerException을 발생시킨다. void setNmae(String name) { this.nam..

Language/Java

Java #7. java.lang패키지와 유용한 클래스 (2) - String 클래스

1. String 클래스 자바에서는 문자열을 위한 클래스를 제공하는데 String클래스가 그것이다. String클래스는 문자열을 저장하고 이를 다루는데 필요한 메소드를 제공한다. 1.1 변경 불가능한(immutable) 클래스 String클래스에는 문자열을 저장하기 위해서 문자형 배열 변수(char[]) value를 인스턴스 변수로 정의해놓고 있다. 인스턴스를 생성 시 생성자의 매개변수로 입력받는 문자열은 이 인스턴스변수(value)에 문자형 배열(char[])로 저장되는 것이다. 한번 생성된 String인스턴스가 갖고 있는 문자열은 읽어 올 수만 있고, 변경할 수는 없다. 예를 들어 아래 코드와 같이 + 연산자를 이용해서 문자열을 결합하는 경우 인스턴스내의 문자열이 바뀌는 것이 아니라 새로운 문자열("..

Language/Java

Java #7. java.lang 패키지와 유용한 클래스 (1) - Object 클래스

1. java.lang 패키지 java.lang 패키지는 자바프로그래밍에 가장 기본이 되는 클래스들을 포함하고 있다. 그렇기 때문에 java.lang 패키지의 클래스들은 import문 없이도 사용할 수 있게 되어 있다. 그 동안 String 클래스나 System클래스를 import문 없이 사용할 수 있었던 이유가 바로 java.lang 패키지에 속한 클래스들이기 때문이었던 것이다. 1.1 Obejct 클래스 Object클래스는 모든 클래스의 최고 조상이기 때문에 Object클래스의 멤버들은 모든 클래스에서 바로 사용 가능하다. Object클래스는 멤버변수는 없고 오직 11개의 메소드만 가지고 있다. 1.2 equals(Object obj) : 매개변수로 객체의 참조변수를 받아서 비교하여 그 결과를 boo..

Language/Java

Java #6. 예외 처리(Exception handling)

1. 예외 처리(Exception handling) 1.1 프로그램 오류 프로그램이 실행 중 어떤 원인에 의해서 오작동을 하거나 비정상적으로 종료되는 경우가 있다. 이런한 결과를 초래하는 원인을 프로그램 에러 또는 오류라고 한다. 이를 발생 시점에 따라 '컴파일 에러(compile-time error)' 와 '런타임 에러(runtime error)' 로 나눌 수 있는데, 컴파일 에러는 컴파일 할 때 발생하는 에러이고 프로그램의 실행도중에 발생하는 에러를 런타임 에러라고 한다. 이 외에도 '논리적 에러(logical error)' 가 있는데, 컴파일도 잘 되고 실행도 잘되지만 의도한 것과 다르게 동작하는 것을 말한다. 컴파일 에러 컴파일 시에 발생하는 에러 런타임 에러 실행 시에 발생하는 에러 논리적 에러..

Language/Java

Java #5. 객체 지향 프로그래밍 (2) - 내부 클래스(Inner class)

1. 내부 클래스(Inner class) 1.1 내부 클래스란? 내부 클래스는 클래스 내에 선언된 클래스이다. 한 클래스를 다른 클래스의 내부 클래스로 선언하면 두 클래스의 멤버들 간에 서로 쉽게 접근할 수 있다는 장점과 외부에는 불필요한 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있다는 장점을 얻을 수 있다. 👉 내부 클래스의 장점 - 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다. - 코드의 복잡성을 줄일 수 있다.(캡슐화) 아래의 코드를 class A { ... } class B { ... } 다음과 같이 바꾸면, B는 A의 내부 클래스(inner class)가 되고, A는 B를 감싸고 있는 외부 클래스(outer class)가 된다. class A { class B { ... } ..

Language/Java

Java #5. 객체 지향 프로그래밍 (2) - 인터페이스(Interface)

1. 인터페이스(Interface) 1.1 인터페이스란? 인터페이스는 일종의 추상클래스이다. 인터페이스는 추상클래스와 달리 몸통을 갖춘 일반 메소드 또는 멤버변수를 구성원으로 가질 수 없다. 오직 추상메소드와 상수만을 멤버로 가질 수 있으며, 그 외의 다른 어떠한 요소도 허용하지 않는다. 추상클래스를 부분적으로만 완성된 '미완성 클래스' 라면, 인터페이스는 구현된 것은 아무 것도 없고 밑그림만 그려져 있는 '기본 설계도' 라고 할 수 있다. 1.2 인터페이스의 작성 인터페이스를 작성하는 것은 클래스를 작성하는 것과 같다. 다만 키워드로 class 대신 interface를 사용한다. 그리고 interface도 클래스와 같이 접근제어자로 public이나 default를 사용할 수 있다. interface 인..

Language/Java

JAVA #5. 객체 지향 프로그래밍 (2) - 다형성, 추상클래스

1. 다형성(Polymorphism) 1.1 다형성이란? 객체지향개념에서 다형성이란 '여러 가지 형태를 가질 수 있는 능력' 을 의미하며, 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현하였다. 이를 좀 더 구체적으로 말하자면, 조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 하였다는 것이다. 예제를 통해서 더 자세히 알아보자. public class Tv { boolean power; int channel; void power() { power = !power; } void channelUp() { ++channel; } void channelDown() { --channel; } } class CaptionTv exten..

Language/Java

JAVA #5. 객체 지향 프로그래밍 (2) - Package와 Import, 제어자

1. 패키지(Package) 패키지란, 클래스의 묶음이다. 패키지에는 클래스 또는 인터페이스를 포함시킬 수 있으며, 서로 관련된 클래스끼리 그룹 단위로 묶어 놓음으로써 클래스를 효율적으로 관리할 수 있다. 지금까지는 단순히 클래스 이름으로만 클래스를 구분 했지만 클래스의 실제 이름(full name)은 패키지명을 포함한 것이다. 예를 들면 String 클래스의 패키지명을 포함한 이름은 java.lang.String이다. 즉, java.lang 패키지에 속한 String 클래스라는 의미이다. 그래서 같은 이름의 클래스일지라도 서로 다른 패키지에 속하면 패키지명으로 구별 가능하다. 클래스가 물리적으로 하나의 클래스파일(.class)인 것과 같이 패키지는 물리적으로 하나의 디렉토리이다. 그래서 어떤 패키지에 ..

Language/Java

Java #5. 객체 지향 프로그래밍 (2) - 상속, 오버라이딩

1. 상속 1.1 상속의 정의와 장점 상속이란, 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 상속을 통해서 클래스를 작성하면 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이하다. 자바에서 상속을 구현하는 방법은 아주 간단하다. 새로 작성하고자 하는 클래스의 이름 뒤에 상속받고자 하는 클래스의 이름을 키워드 extends와 함께 써주기만 하면 된다. class Child extends Parent { ... } 이 두 클래스는 서로 상속 관계에 있다고 하며, 상속해주는 클래스를 '조상클래스', 상속 받는 클래스를 '자손 클래스' 라고 한다. 조상 클래스 : 부모(parent) 클래스, 상위(super) 클래스..

Language/Java

Java #5. 객체 지향 프로그래밍 - 오버로딩, 생성자, 변수의 초기화

오버로딩(Overloading) 한 클래스 내에 같은 이름의 메소드를 여러 개 정의하는 것을 메소드 오버로딩 또는 간단히 오버로딩 이라 한다. 같은 이름의 메소드를 정의한다고 해서 무조건 오버로딩인 것은 아니다. 오버로딩이 성립되려면 아래와 같은 조건을 만족해야 한다. 1. 메소드 이름이 같아야 한다. 2. 매개변수의 개수 또는 타입이 달라야 한다. 오버로딩된 메소드들은 매개변수에 의해서만 구분될 수 있으므로 반환 타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다. int add(int a, int b) { return a + b; } int add(int x, int y) { return x + y; } 위 두 메소드는 매개변수의 이름만 다른 뿐 매개변수의 타입이 같기 때문에 오버로딩이 성립하지 ..

SeongJun Han
'Language/Java' 카테고리의 글 목록