본문 바로가기

JAVA

(34)
Stack과 Queue 1. Stack 스택은 밑 부분이 막혀 있는 통 구조로 단방향으로만 데이터를 교환한다. 즉, 마지막에 저장한 데이터를 가장 먼저 빼내는 LIFO(Last In First Out) 방식으로 되어 있다. 예를 들어 스택에 0, 1, 2 순서로 데이터를 저장(push)했다면, 꺼낼 때(pop)는 2, 1, 0 순으로 빼오게 되는 것이다. 스택 구조에서는 순서가 바뀌게 되는 것을 주의해야 한다. 자바에서는 스택을 클래스로 제공하고 있기 때문에 그 자체로도 구현이 가능하다. class StackTest { Stack stack = new Stack(); stack.push(0); stack.push(1); stack.push(2); while(!stack.empty()) { System.out.println(st..
Collection Framework : List, Set, Map 1. Collection Framework Collection Framework 은 데이터 군을 다루고 표현하기 위한 자료 구조이다. 자바에서는 Collection Framework에서 크게 List, Set, Map 이렇게 3 가지 형태의 인터페이스로 분류하였다. 이 중 List 와 Set 간의 공통 부분을 추출하여 인터페이스 Collection 를 만들었고, Map 은 Collection 과의 관계가 없다. JDK1.2 버전 이전에서는 Vector, Stack, Hashtable, Properties 와 같은 legacy 클래스가 쓰였으며, 현재까지도 존재하지만 이는 이전에 작성된 코드와의 호환(하위 호환)을 위해 남겨둔 것으로 사용을 자제해야 한다. 2. Collection Framework 인터페..
Project_03 : 콘솔 프로그램 Student - 리스트 활용 버전 앞선 프로젝트의 틀은 그대로 유지하되 배열로 구현하던 부분을 리스트를 이용하여 구현해 보도록 하겠다. - StudentApp 👉 Controller 부분에서는 바뀌는 부분이 없기 때문에 생략한다. - StudentService 👉 배열을 리스트로 변경하면서 count 체크를 할 필요가 없어졌다. 👉 삭제 후에는 알아서 리스트 size가 줄어들기 때문에 조정할 필요가 없다. 👉 리스트는 학생을 성적순으로 정렬하기 위해 sort 메서드를 사용할 수 있는데 정렬 대상인 클래스가 인터페이스 Comparable를 구현해야 한다. public class StudentService { // 학생 객체를 저장할 리스트 생성 // 제네릭 타입 : Student private List students = new Array..
Project_02 : 콘솔 프로그램 Student - 배열 활용 버전 DB 연결을 하지 않고 콘솔 출력을 하는 프로젝트를 해보려고 한다. DB 연결을 하지 않기 때문에 데이터는 배열을 활용하고자 한다. 이번 프로젝트는 학생의 정보를 출력하는 게시판을 구현하는 것을 목적으로 한다. controller service vo util exception StudentApp StudentService Student StudentUtils MyRangeException - StudentApp 👉 Controller의 역할을 하는 클래스로 main 메서드를 포함하고 있다. 👉 숫자를 입력해야 할 때 다른 것을 입력하면, 숫자 타입이 아니라는 예외 처리를 하도록 하였다. (NumberFornetException) import static student.StudentUtils.*; publ..
예외 처리 Exception Handling 1. 프로그램 오류의 종류 프로그램을 실행 중 비정상적으로 종료된 경우에 대하여 그 발생 시점을 기준으로 '컴파일 에러'와 '런타임 에러'라고 한다. 에러 종류 발생 시점 내용 컴파일 에러 컴파일 시 발생 오타, 잘못된 구문, 자료형 체크 등의 기본적인 문법 검사를 실행한다. 런타임 에러 실행 시 발생 실행 도중 발생할 수 있는 잠재적 오류 발생할 수 있는 모든 경우의 수에 대한 처리를 해야 한다. 논리적 에러 실행 후 발생 컴파일도 되고, 실행도 되지만 원하는 방향의 동작을 하지 않는 경우이다. 이 중에서도 실행 시에 발생할 수 있는 에러 중 비정상적인 종료를 미리 작성한 코드로 인하여 막을 수 있는 것을 '예외 Exception'라고 한다. 예외는 코드로 제어가 어느 정도 가능하기 때문에 발생 가능한..
Project_01 : 상속과 인터페이스 예제 만들기 상속과 인터페이스의 관계를 이해하기 위한 Shape 예제를 만들어 보자. abstract class Shape class Circle class Quadrangle interface Shape2D class Cylinder class Cube interface Shape3D 예제 초기 설계 - abstract class Shape 👉 Shape 클래스는 모든 도형의 최상위 부모 클래스로, 직접적인 인스턴스 생성이 필요 없는 클래스이기 때문에 추상 클래스로 구현한다. 👉 모든 도형은 넓이를 구하는 메서드가 필요로 하지만 구현부가 제각기이기 때문에 추상 메서드로 구현한다. - class Circle, class Quadrangle 👉 원은 반지름을 멤버로 가지고 있고, 사각형은 가로와 세로를 멤버로 가지고 ..
내부 클래스와 익명 클래스 1. 내부 클래스란? 내부 클래스는 그 이름 그대로 클래스 내부에 선언되는 클래스를 말한다. 내부 클래스를 사용하는 이유는 클래스 간의 관계가 긴밀하기 때문이다. 내부 클래스 사용으로 인한 장점은 다음과 같다. 1. 내부 클래스에서 외부 클래스의 멤버에 쉽게 접근 가능하다. 2. 캡슐화를 통해 코드 복잡성을 줄일 수 있다. 2. 내부 클래스 종류와 특징 내부 클래스는 선언 위치에 따라 불리는 이름이 다르고, 선언이 가능한 위치는 변수와 동일하다. 내부 클래스 위치 특징 인스턴스 클래스 (instance class) 외부 클래스 멤버 변수 선언 위치와 동일 외부 클래스의 인스턴스 멤버처럼 사용 스태틱 클래스 (static class) 외부 클래스 멤버 변수 선언 위치와 동일 외부 클래스의 static 멤버..
인터페이스 1. 인터페이스란? 인터페이스는 추상 메서드와 상수를 멤버로 같는 일종의 추상 클래스이다. 🖍 JDK1.8 부터는 static 메서드와 default 메서드를 추가함 앞서 추상 클래스를 미완성 설계도라고 하였는데, 인터페이스는 그보다 더 추상화 되어 있기 때문에 구상 클래스를 위한 '기본 설계도' 정도라고 생각하면 된다. 추상 메서드를 갖기 때문에 인터페이스를 상속하는 자식 클래스에서는 해당 추상 메서드를 구현해야 한다. 구상 클래스 : 완벽한 설계도 추상 클래스 : 미완성 설계도 인터페이스 : 기본 설계도 2. 인터페이스 구현 인터페이스는 class 대신 interface 키워드를 사용하여 작성할 수 있다. 또한 몇 가지 제한 사항이 있는데 다음과 같다. 1. 모든 멤버 변수는 public static..