Back-End/Java 기초정리 16

Java ■ 제네릭과 컬렉션

◈ 제네릭(Generic) ◈ 데이터 타입을 외부에서 지정함  미리 데이터 타입을 지정해두지 않고 외부에서 사용할 때 지정하는 데이터 타입으로 유동적으로 변경하여 지정해줌 • 사용 방법1. 클래스에 와 같이 제네릭을 설정한 후, 필드의 데이터 타입을 T로 지정2. 객체를 생성할 때 클래스명을 지정3. 설정한 데이터 타입으로 사용이 가능한지 확인 * 즉, 외부에서 어떠한 데이터 타입으로 만들어 사용할 지 모르는 필드 또는 매개변수 등에 주로 사용됨  • int 대신 Integer를 사용하는 이유Person 위치에 있는 데이터 타입은 참조형만 올 수 있음 기본형 타입은 올 수 없기 때문에 int의 wrapper class인 Integer를 사용해야 함 * 제네릭은 참조형 변수, 즉 객체를 필요로 하며 기본형..

Java ■ 예외

◈ 예외처리(Exception) ◈ 특정 오류가 발생했을 때 무시하고 싶거나, 오류에 따라 적당한 작업을 처리할 수 있도록 해주는 것 • 예외처리를 하는 이유프로그램의 비정상적인 동작으로 인해 발생하는 예외를 미리 대비하고, 프로그램을 정상적 으로동작할 수 있도록 사전에 방지하고자 사용함 • 에러 종류  • 예외 종류  • 예외 구조  • try-catch문자바에서의 예외처리는 try-catch문을 사용하며 try에서는 예외를 감지할 코드그리고 catch에서는 특정 예외가 발생 시 실행할 코드를 작성함* try에 있는 코드를 실행할 때 예외가 발생한다면 이후의 코드는 실행되지 않음    • 실습배열의 범위를 벗어나게 하여 OutOfBounds를 발생시켜 확인하기  • try-catch-finally문fi..

Java ■ 추상화

◈ 추상화 (abstract) ◈ 구체적인 사실들을 일반화시켜 기술하는 개념으로써 필요한 공통점을 추출하고 불필요한 공통점을 제거하는 과정1. 복잡한 시스템을 단순화하고 모델링이 가능  • 추상 클래스 (1) - 추상 클래스(abstract class)미완성된 클래스로써, 구현부 {} 가 없는(미완성인) 메소드를 가지고 있음 - 추상 클래스와 메소드 예시  • 추상 클래스 (2) - 추상 클래스(abstract class)미완성된 클래스 - 추상 메소드(abstract method)구현부 {} 가 없는(미완성인) 메소드 - 추상 클래스와 메소드 예시 • 추상 클래스 (3) - 추상 클래스를 사용하는 이유똑같은 부모 클래스(추상 클래스)를 상속 받지만, 자식 클래스들의 메소드가모두 다른 기능을 수행할 것으..

Java ■ 다형성(Polymorphism)

◈ 다형성 ◈ 여러가지의 형태를 가질 수 있는 개념 (오버로딩, 오버라이딩, …) 1. 코드의 재사용성을 높이고, 중복을 최소화 2. 계층적인 구조를 통해 객체 간의 관계를 나타낼 수 있음 • 오버라이딩 vs 오버로딩 오버라이딩 -> 부모 클래스에서 상속받은 메소드를 재정의 하는 행위 오버로딩 -> 같은 클래스 내에서 메소드의 매개변수 타입/위치를 종류별로 만드는 행위 • 다형성을 통한 객체 참조 (1) 객체를 생성할 때 부모 클래스의 타입으로 객체 생성이 가능 이를 통해 동일한 타입(부모 클래스)을 가진 여러가지 하위 클래스 객체를 생성할 수 있음 • 다형성을 통한 객체 참조 (2) 부모 클래스가 가지고 있는 필드를 활용할 수 있으나, 내가(Dog) 가진 필드는 일반적인 방법으로 사용할 수 없음 • 참..

Java ■ 접근제어자와 캡슐화, 예약어

◈ 접근제어자 ◈ 이름 그대로 접근을 제한하며, 캡슐화(정보은닉)의 개념 중 하나 아래 표에서 클래스를 제외한 필드와 메소드의 제어자는 같다. ◈ 클래스 접근제어자 ◈ • 클래스 default 같은 패키지에서만 접근이 가능하므로 에러 발생 ◈ 멤버변수&메소드 접근제어자 ◈ • 멤버변수&메소드 default 같은 패키지에서만 접근 가능하므로, 다른 패키지일 때 자식 클래스이더라도 접근 불가 • 멤버변수&메소드 protected 다른 패키지에 있는 자식 클래스에서 사용 가능 default 또는 private으로 할 경우 불가 ◈ 캡슐화 ◈ 변수와 메서드를 클래스로 묶어 독립적으로 동작하지 않도록 하거나 불필요한 정보를 노출시키지 않는 개념 1. 코드의 유지보수성을 향상 2. 객체의 내부 구현을 외부로부터 숨..

Java ■ 상속

◈ 상속 ◈ 다른 클래스가 가지고 있는 멤버(필드, 메소드)들을 상속받아 재활용하는 것 부모와 자식간의 관계로 나타냄 • 장점 1. 코드를 재활용함으로써 코드의 중복을 제거하고, 코드의 양이 줄어듬 2. 공통된 코드를 관리할 수 있기 때문에 코드의 유지보수(추가/변경)에 좋음 ◈ 상속의 종류 ◈ • 다중 상속 여러 개의 부모 클래스를 가질 수 있는 상속 • 단일 상속 한가지의 부모 클래스만 가질 수 있는 상속 * 자바에서는 단일 상속만을 지원함 ◈ 다중 상속 ◈ • 다중 상속의 문제점 1. 모호성 -> 상속받은 부모 클래스들끼리 같은 이름을 가진 메소드나 변수가 있을 경우 어떤 부모 클래스에서 호출 해야하는지 알 수 없는 모호성이 발생 2. 복잡성 -> 다중 상속을 사용하면 클래스 간의 관계가 복잡해지고..

Java ■ 생성자, this, this()

◈ 생성자 ◈ 객체를 생성할 때 호출되며, 객체를 초기화하는 메소드 * 멤버 변수들을 기본값으로 초기화 • 생성자 호출 아래와 같이 이미 자신도 모르게 생성자를 호출해왔음 • 참고 생성자를 따로 만들지 않았는데, 위와 같이 사용이 가능했던 이유는 컴파일 시 생성자가 하나도 없을 경우 자동으로 생성자를 만들어줌 • 생성자 규칙 1. 클래스 이름과 동일해야 함 2. 리턴값이 없음 (void 없음) -> 생성자의 경우 항상 반환되는 값이 없기 때문에 void를 생략하고 사용함 3. 모든 클래스는 최소 1개 이상의 생성자를 가져야 함 -> 이러한 이유로 컴파일 시 생성자가 하나도 없다면 자동으로 생성해줌 • 생성자의 종류 생성자에는 기본 생성자와 매개변수가 있는 생성자가 있으며 기본 생성자는 매개변수가 하나도 ..

Java ■ 호출 스택과 기본형,참조형 매개변수

◈ 스택 vs 큐 ◈ • 스택(Stack) 쌓아 올리는 형태를 가진 자료구조이며 후입선출(LIFO, Last In First Out)의 구조 ex) 1. 데이터 0을 꺼내기 위해서는 데이터 1, 2를 모두 꺼내야 함 2. 데이터 1을 꺼내기 위해서는 데이터 2를 꺼내야 함 • 큐(Queue) 줄을 서서 기다리는 형태를 가진 자료구조이며 선입선출(FIFO, First In First Out)의 구조 ex) 1. 데이터 0을 바로 꺼낼 수 있음 2. 데이터 1을 꺼내기 위해서는 데이터 0을 먼저 꺼내야 함 ◈ 호출 스택(Call Stack) ◈ 메소드 호출과 관련된 정보를 저장하는 메모리 영역으로 후입선출(LIFO) 구조를 가짐 • 설명 main 메소드가 호출되어 스택에 올라가있는 상태 • 설명 main 메..

Java ■ 객체 배열

◈ 객체 배열 ◈ 객체를 배열 형태로 사용 • 인덱스(Index) 배열 내의 각 요소(element)에 접근하기 위해 사용되는 번호로써 인덱스는 0부터 시작함 ◈배열의 메모리 구조 ◈ 배열은 참조형 변수이기 때문에 힙 메모리에 값을 저장함 ◈ 객체 배열의 메모리 구조 ◈ • 설명 객체 배열은 동적으로 크기가 결정되기 때문에 일반 배열과는 다름 ◈ 객체 배열의 선언과 할당 ◈ • 객체 배열 선언 1. 클래스[] 배열명; 2. 클래스 배열명[]; • 객체 배열 생성 1. 클래스[] 배열명 = new 클래스[배열크기]; 2. 클래스 배열명[] = new 클래스[배열크기]; • 각각 배열 인덱스의 객체 생성 1. 배열명[인덱스] = new 클래스(); • 객체 배열 선언+생성+객체화 클래스[] 배열명 = { n..

Java ■ 객체 문제풀이

문 제 풀 이 [Q1] 오버로딩을 활용하여 덧셈을 수행하는 계산기 프로그램을 만드시오. 1. 스캐너로 사용자로부터 숫자를 입력받으세요. 2. 오버로딩을 활용하여 덧셈을 수행하고 결과를 출력하세요. 3. 클래스명 : QuizCalc 4. 메소드명 : add 5. 정수와 실수도 같이 계산이 가능해야 합니다. (ex. 3+3.5) 6. 오버로딩은 총 5개 이상 활용 하세요. [Q2] 멤버 변수를 활용하여 물품 구매 기능을 구현하시오. 1. Buy 클래스 생성 2. 초기 금액(소지금)을 설정하기 위한 변수 설정 -> int balance = 100000 3. 물건들의 가격 설정 (상수) -> 모니터 20000 (변수명 : MONITOR_PRICE) -> 모니터 18000 (변수명 : MOUSE_PRICE) ->..