본문 바로가기

OOP

(14)
[Java] 컬렉션 프레임워크 컬렉션 프레임워크데이터 군을 저장하는 클래스들을 표준화한 설계컬렉션 프레임워크에는 List, Set, Map 인터페이스가 존재한다.이중 List와 Set의 공통된 부분을 뽑아서 새로운 인터페이스인 Collection을 추가로 정의하였다. 인터페이스 특징 List 순서가 있는 데이터의 집합. 데이터의 중복 허용. 구현 클래스 : ArrayList, LinkedList, Stack, Vector Set 순서가 없는 데이터의 집합. 데이터의 중복 허용하지 않음. 구현 클래스 : HashSet, TreeSet Map Key와 Value의 쌍으로 이루어진 데이터의 집합. 순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값은 중복을 허용함. 구현 클래스 : HashMap, TreeMap, Hashtable, ..
[Java] 예외처리 에러의 종류컴파일 에러 - 컴파일 시에 발생하는 에러런타임 에러 - 실행 시에 발생하는 에러논리적 에러 - 실행은 되지만, 의도와 다르게 동작하는 것 에러 vs 예외자바에서는 실행 시 발생할 수 있는 프로그램 오류를 에러와 예외로 구분하였다. 에러는 스택오버플로우(StackOverflowError), 메모리 부족(OutOfMemoryError)과 같이 일단 발생하면 복구할 수 없다.에러가 발생하면, 프로그램의 비정상적인 종료를 막을 길이 없지만, 예외는 발생하더라도 프로그래머가 이에 대한 적절한 코드를 미리 작성해 놓음으로써 프로그램의 비정상적인 종료를 막을 수 있다.에러 - 프로그램 코드에 의해서 수습될 수 없는 심각한 오류예외 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류 예외 클래스의 계..
[Java] 추상클래스와 인터페이스 추상클래스미완성 클래스로 추상메서드를 포함하고 있다는 것을 제외하고는 일반 클래스와 전혀 다르지 않다.생성자, 멤버변수, 메서드를 가진다.인스턴스를 생성할 수 없고, 자손클래스에 의해 완성될 수 있다.새로운 클래스를 작성하는데 있어서 바탕이 되는 조상클래스로서 중요한 의미를 가진다.키워드 'abstract'를 붙이면 추상클래스로 표현된다. 추상메서드선언부만 작성하고 구현부는 작성하지 않은 채로 남겨둔 것.즉, 설계만 해놓고 실제 수행될 내용은 작성하지 않았기 때문에 미완성 메서드.abstract 리턴타입 메서드이름();'abstract' 키워드를 붙이고, 구현부가 없으므로 괄호{ } 대신 문장의 끝을 알리는 ';'을 적어줌. 메서드를 미완성 상태로 남겨놓는 이유는 메서드의 내용이 상속받는 클래스에 따라 ..
[Java] Vector 클래스 Vector 클래스동적으로 크기가 관리되는 객체 배열.내부적으로 Object 타입의 배열을 가지고 있어서, 이 배열에 객체를 추가하거나 제거할 수 있게 작성되어 있다.배열의 크기를 알아서 관리해주기 때문에 저장할 인스턴스의 개수에 신경쓰지 않아도 된다. 메서드 / 생성자 설명 Vector() 10개의 객체를 저장할 수 있는 Vector 인스턴스를 생성한다. 10개 이상의 인스턴스가 저장되면, 자동적으로 크기가 증가된다. boolean add(Object o) Vector에 객체를 추가한다. 추가에 성공하면 true, 실패하면 false를 반환한다. boolean remove(Object o) Vector에 저장되어 있는 객체를 제거한다. 제거에 성공하면 true, 실패하면 false를 반환한다. bool..
[Java] 다형성 다형성(polymorphism)여러 가지 형태를 가질 수 있는 능력. 참조변수의 형변환기본형 변수와 같이 참조변수도 형변환이 가능하다. 단, 서로 상속관계에 있는 클래스 사이에서만 가능하다.자손타입 → 조상타입(Up-casting) : 형변환 생략 가능자손타입 ← 조상타입(Down-casting) : 형변환 생략 불가 Car 클래스와 Car 클래스를 상속받은 FireEngine 클래스가 있을 때, 가능한 형변환은 다음과 같다.12345678910111213class Car { String color; int door; void drive() { } void stop() { }} class FireEngine extends Car { void water() { }}cs 123456Car car = null..
[Java] 제어자 제어자클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다.제어자의 종류는 접근 제어자와, 그외의 제어자로 나뉜다.접근 제어자 - public, protected, default private그외 제어자 - static, final, abstract, native, transient, synchronized, volatile, strictfp static'클래스의', '공통적인'의 의미를 가진다.static이 붙은 멤버변수와 메서드, 초기화 블럭은 인스턴스가 아닌 클래스에 관계된 것이기 때문에 인스턴스를 생성하지 않고도 사용할 수 있다. final'마지막의', '변경될 수 없는'의 의미를 가진다.변수에 사용되면 값을 변경할 수 없는 상수가 되며, 메서드에 사용되면 오버라이딩을 할 ..
[Java] 상속 상속기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것.코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여한다.자손 클래스는 조상 클래스의 모든 멤버를 상속받으므로 항상 조상 클래스보다 같거나 많은 멤버를 가진다.조상 클래스가 변경되면 자손 클래스는 영향을 받게 되지만, 자손 클래스가 변경되는 것은 조상 클래스에 아무런 영향을 주지 못한다.생성자와 초기화 블럭은 상속되지 않으며 멤버만 상속된다.12345678class Parent { int age;} class Child extends Parent { void play() { }}cs 클래스 클래스의 멤버 Parent age Child age, play() 포함관계한 클래스의 멤버변수로 다른 클래스 타입의 참조변..
[Java] 생성자 생성자인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'메서드와 마찬가지로 클래스 내에 선언되며, 구조도 메서드와 유사하지만 리턴값이 없다는 점이 다르다.생성자의 이름은 클래스의 이름과 같아야 한다.생성자는 리턴 값이 없다.연산자 new가 인스턴스를 생성하는 것이지 생성자가 인스턴스를 생성하는 것이 아니다.1Card c = new Card();cs 1. 연산자 new에 의해서 메모리(heap)에 Card 클래스의 인스턴스가 생성된다.2. 생성자 Card()가 호출되어 수행된다.3. 연산자 new의 결과로, 생성된 Card 인스턴스의 주소가 반환되어 참조변수 c에 저장된다. 기본 생성자모든 클래스에는 반드시 하나 이상의 생성자가 정의되어 있어야 한다.컴파일할 때, 소스파일의 클래스에 생성자가 하나도 ..
[Java] 오버로딩과 오버라이딩 오버로딩한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것으로 같은 기능을 하는 메서드의 경우 하나의 이름으로 정의할 수 있다.메서드의 이름이 같아야 한다.매개변수의 개수 또는 타입이 달라야 한다. 가변인자기존에는 메서드의 매개변수 개수가 고정적이었으나 JDK1.5부터 동적으로 지정해줄 수 있게 되었다.'타입... 변수명'과 같은 형식으로 선언한다. 가변인자 외에도 매개변수가 더 있다면, 가변인자를 매개변수 중에서 제일 마지막에 선언해야 한다.123public PrintStream printf(String format, Object... args) { ...}Colored by Color Scriptercs 오버라이딩조상 클래스로부터 상속받은 메서드의 내용을 자손 클래스 자신에 맞게 변경하는 것...
[Java] 변수, 메서드 선언위치에 따른 변수의 종류 변수의 종류 선언 위치 생성 시기 클래스 변수 클래스 영역 클래스가 메모리에 올라갈 때 인스턴스 변수 인스턴스가 생성되었을 때 지역 변수 클래스 영역 이외의 영역 (메서드, 생성자, 초기화 블럭 내부) 변수 선언문이 수행되었을 때 1. 인스턴스 변수클래스 영역에 선언되며, 클래스의 인스턴스를 생성할 때 만들어진다. 이 때문에 인스턴스 변수의 값을 읽어 오거나 저장하기 위해서는 먼저 인스턴스를 생성해야 한다. 인스턴스는 독립적인 저장공간을 가지므로 서로 다른 값을 가질 수 있다. 2. 클래스 변수인스턴스 변수 앞에 static을 붙이기만 하면 된다. 인스턴스 변수와는 달리, 모든 인스턴스가 공통된 저장공간(변수)을 공유한다.인스턴스를 생성하지 않고도 언제라도 바로 사용할 수 있..