Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- JSP
- 디버깅
- ChatGPT
- 상속
- 머신러닝
- 데이터베이스
- 파이썬
- rnn
- 자바스크립트심화
- SQL
- JDBC
- 자바 실습
- 순환신경망
- 중학수학
- 데이터분석
- 컴퓨터비전
- 중학1-1
- 혼공머신
- 연습문제
- JSP/Servlet
- 딥러닝
- 정보처리기사실기
- CSS
- 컴퓨터구조
- c언어
- 자바스크립트
- 정보처리기사필기
- 개발일기
- html/css
- 자바
Archives
- Today
- Total
클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지
[Spring반] 중간시험 8 - Java 이론 시험 및 문제 풀이 8 : 문제 19~20번 <추상클래스와 인퍼페이스> 본문
개발 포트폴리오/수료증 및 시험
[Spring반] 중간시험 8 - Java 이론 시험 및 문제 풀이 8 : 문제 19~20번 <추상클래스와 인퍼페이스>
huenuri 2024. 12. 8. 23:18이제 이론 시험 마지막 문제 두 문제만 남아있다. 한 문제를 풀면서 관련된 개념을 모두 공부하기에 시간이 많이 걸린다. 그래도 공부가 많이 되고 있다.
Java 이론 시험 여덟 번째
문제 19번
객체지향의 특징 4가지 키워드를 작성하시오.
객체지향 프로그래밍(OOP)의 주요 특징은 코드의 재사용성과 유지보수성을 높이고, 현실 세계를 소프트웨어로 모델링하기 쉽게 만들어주는 핵심 개념이다.
1. 캡슐화 (Encapsulation)
- 키워드 : 정보 은닉, 데이터 보호, Getter와 Setter
- 설명
- 객체 내부의 데이터(필드)와 메서드(행동)를 하나로 묶어 외부에서 접근을 제한
- 객체의 세부 구현을 숨기고, 외부에서는 필요한 정보만 접근할 수 있도록 제한
- 주로 접근 제어자(private, public, protected)를 통해 데이터 접근을 제어
public class Person {
private String name; // 외부에서 직접 접근 불가
private int age;
// Getter와 Setter를 통해 접근
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
2. 상속 (Inheritance)
- 키워드 : 코드 재사용, 부모-자식 관계
- 설명
- 기존 클래스(부모 클래스)의 속성과 메서드를 새로운 클래스(자식 클래스)가 재사용하고, 확장하거나 변경할 수 있는 기능
- 중복 코드를 줄이고, 계층 구조를 통해 유지보수성을 향상함
class Animal {
public void eat() {
System.out.println("먹고 있습니다.");
}
}
class Dog extends Animal {
public void bark() {
System.out.println("멍멍!");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.eat(); // 부모 클래스의 메서드
dog.bark(); // 자식 클래스의 메서드
}
}
3. 다형성 (Polymorphism)
- 키워드 : 동적 바인딩, 오버라이딩, 오버로딩
- 설명
- 하나의 메서드나 클래스가 다양한 형태로 동작할 수 있는 능력
- 컴파일 타임(정적 바인딩)과 런타임(동적 바인딩)의 형태로 구분
- 오버로딩 : 같은 이름의 메서드지만, 매개변수의 타입이나 개수에 따라 다르게 동작
- 오버라이딩 : 부모 클래스의 메서드를 자식 클래스에서 재정의
class Animal {
public void sound() {
System.out.println("동물이 소리를 냅니다.");
}
}
class Dog extends Animal {
@Override
public void sound() {
System.out.println("멍멍!");
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Dog(); // 부모 타입으로 자식 객체 참조
animal.sound(); // 출력: 멍멍! (동적 바인딩)
}
}
4. 추상화 (Abstraction)
- 키워드 : 핵심 정보만 표현, 불필요한 세부 정보 숨기기
- 설명
- 객체의 핵심적인 속성만 표현하고, 구현 세부 사항을 숨김
- 주로 추상 클래스(abstract class)와 인터페이스를 통해 구현
- 불필요한 정보를 제거해 간결하고 명확한 설계를 가능하게 함
abstract class Animal {
abstract void sound(); // 추상 메서드
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("멍멍!");
}
}
public class Main {
public static void main(String[] args) {
Animal dog = new Dog();
dog.sound(); // 출력: 멍멍!
}
}
5. 추가 특징
a) 객체 (Object)
- 키워드 : 상태와 행동, 클래스의 인스턴스
- 설명
- 현실 세계의 사물을 소프트웨어적으로 표현한 단위
- 속성(필드)과 동작(메서드)을 포함하며, 클래스의 인스턴스화된 형태
b) 메시지 전달 (Message Passing)
- 키워드 : 객체 간 통신
- 설명
- 객체는 메서드 호출을 통해 서로 데이터를 교환하거나 상호작용
c) 동적 바인딩 (Dynamic Binding)
- 키워드 : 실행 시점 결정
- 설명
- 메서드 호출이 컴파일 시점이 아닌 런타임에 결정되어 동작
정리
특징 | 키워드 | 설명 |
캡슐화 | 정보 은닉, Getter/Setter | 데이터와 메서드를 묶고 외부 접근 제한 |
상속 | 코드 재사용, 부모-자식 관계 | 부모 클래스의 기능을 자식 클래스가 상속받아 재사용 |
다형성 | 동적 바인딩, 오버로딩, 오버라이딩 | 하나의 메서드/클래스가 다양한 형태로 동작 |
추상화 | 핵심 정보 표현, 세부 정보 숨김 | 불필요한 세부 정보를 제거하고 핵심 로직만 설계 |
객체 | 상태와 행동 | 클래스의 인스턴스이며, 현실 세계를 모델링 |
메시지 전달 | 객체 간 통신 | 객체가 메서드 호출로 서로 상호작용 |
동적 바인딩 | 실행 시점 결정 | 메서드 호출이 런타임에 동적으로 결정 |
이렇게 객체지향의 특징을 이해하면, 더 나은 설계와 유지보수가 쉬운 프로그램을 작성할 수 있다.
문제 20번
추상클래스의 특징과 역할에 대해서 작성하시오.
1. 추상 클래스의 정의
- 추상 클래스는 객체를 직접 생성할 수 없는 클래스로, 상속을 통해서만 사용되는 설계의 틀을 제공한다.
- 주로 공통된 속성과 동작을 정의하면서, 하위 클래스에서 반드시 구현해야 할 동작은 추상 메서드로 선언한다.
2. 추상 클래스의 주요 특징
1. 객체 생성 불가
- 추상 클래스는 불완전한 설계도를 가지고 있으므로 인스턴스화(객체 생성)할 수 없다.
- 반드시 상속받아 구체적인 클래스를 통해 사용해야 한다.
abstract class Shape {
abstract void draw(); // 추상 메서드
}
// Shape shape = new Shape(); // 컴파일 에러: 추상 클래스는 객체 생성 불가
2. 추상 메서드를 포함할 수 있음
- 추상 메서드는 선언만 존재하고 구현(내용)은 없는 메서드
- 추상 메서드는 하위 클래스에서 반드시 재정의(@Override)해야 한다.
abstract class Shape {
abstract void draw(); // 하위 클래스에서 반드시 구현
}
3. 일반 메서드도 포함 가능
- 추상 클래스는 추상 메서드뿐만 아니라 일반 메서드도 포함할 수 있다.
- 일반 메서드를 포함하면 상속받는 클래스가 공통된 동작을 재사용할 수 있다.
abstract class Shape {
abstract void draw();
public void display() {
System.out.println("이것은 도형입니다.");
}
}
4. 필드와 생성자를 가질 수 있음
- 추상 클래스는 필드(속성)와 생성자를 포함할 수 있다.
- 생성자는 하위 클래스의 객체 생성 시 호출된다.
abstract class Shape {
private String name;
public Shape(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
5. abstract 키워드로 선언
- 클래스와 메서드에 abstract 키워드를 사용하여 추상 클래스를 정의한다.
- 추상 메서드가 포함된 클래스는 반드시 추상 클래스여야 한다.
6. 상속받은 클래스에서 추상 메서드 구현 필수
- 추상 메서드를 구현하지 않으면, 상속받은 클래스도 추상 클래스가 된다.
3. 추상 클래스의 역할
- 공통 기능의 재사용
- 추상 클래스는 공통된 속성과 동작을 정의하여, 하위 클래스에서 재사용할 수 있도록 한다.
- 구현 강제
- 추상 메서드를 통해 하위 클래스가 특정 기능을 반드시 구현하도록 강제할 수 있다.
- 예 : 모든 도형은 반드시 draw() 메서드를 구현해야 한다.
- 설계 기반 제공
- 추상 클래스는 템플릿 역할을 하며, 클래스 계층 구조의 설계를 명확히 표현한다.
- 예 : "모든 동물은 소리를 낸다"는 공통 규칙을 정의하고, 동물의 종류별로 각기 다른 소리를 구현하도록 강제
- 다형성 지원
- 추상 클래스는 부모 타입으로 자식 객체를 참조할 수 있으므로 다형성을 지원한다.
- 실행 시점에 객체의 실제 타입에 따라 적절한 메서드가 호출된다.
4. 추상 클래스 예제
5. 추상 클래스 vs 인터페이스
구분 | 추상클래스 | 인터페이스 |
객체 생성 | 불가능 | 불가능 |
키워드 | abstract | interface |
추상 메서드 포함 여부 | 포함 가능 | 포함 가능 |
일반 메서드 포함 여부 | 포함 가능 | Java 8 이후부터 default 메서드로 포함 가능 |
필드 | 선언 가능 (변수, 상수 모두 가능) | 상수(public static final)만 선언 가능 |
다중 상속 | 불가능 | 가능 (여러 인터페이스 구현 가능) |
상속 관계 | extends 키워드를 사용 | implements 키워드를 사용 |
6. 결론
- 추상 클래스의 특징
- 객체 생성 불가, 추상 메서드 포함, 일반 메서드와 필드, 생성자 포함 가능
- 추상 클래스의 역할
- 상속을 통해 공통 기능을 제공하며, 특정 메서드 구현을 강제
- 인터페이스와의 차이를 이해하면서 적절히 사용하면 효율적인 설계를 할 수 있다.
인터페이스 사용 예제 : 동물 움직임 시뮬레이션
학습을 마치고
이렇게 해서 이론 문제 20문제와 함께 관련된 개념 학습을 모두 진행했다. 오늘 아침까지 지난 학습일지를 정리하며 전에 내가 손코딩으로 공부를 하다 말았던 것들도 보게 되었다. 시간이 나면 다시 전처럼 코드도 암기하며 써보고 공부를 더욱더 열심히 해볼 것이다.
이제 실습 문제도 이어서 풀어봐야지. 자바 하나도 공부할 게 많아서 파이썬과 웹 시험은 언제 다 정리하고 풀어볼까 모르겠다. 그래도 하나씩 해볼 것이다.