delpho
Java에 대하여 - 2 본문
1. 인터페이스와 추상클래스의 차이점에 대해 설명해주세요.
# 추상 클래스
- 클래스를 설계도에 비유한다면 추상 클래스는 미완성 설계도에 비유
- 추상 메서드를 선언하여 상속을 통해서 자손 클래스에서 완성하도록 유도하는 클래스
- 상속을 위한 클래스이기때문에 객채 생성 불가!
# 추상 클래스 규칙
- 추상 클래스는 키워드 abstract를 붙여 표현
- 추상 메서드를 포함하지 않은 클래스에서도 abstract를 붙여서 추상 클래스로 지정할 수도 있음
- 클래스를 abstract로 지정하면 new를 통해 객체를 직접 생성할 수 없다.
- 메소드에 abstract를 사용할 경우 interface의 메소드와 같이 구현 부분은 없다.
- abstract로 선언한 메소드를 자식 클래스에서 반드시 구현해야 한다. (오버라이딩)
- 이는 자식 클래스에서 추상 메서드를 반드시 구현하도록 강제하는 것이다.
# 인터페이스
- 구현된 것은 아무 것도 없고 밑그림만 그려져 있는 기본 설계도라고 비유
- 다른 클래스를 작성하는데 도움을 줄 목적으로 작성
# 인터페이스 특징 및 규칙
- 모든 멤버 변수는 public static final 이어야 하며, 이를 생략할 수 있습니다.
- 단, 반드시 초기화 해야함
- 모든 메소드는 public abstract 이어야 하며, 이를 생략할 수 있습니다.
- (단, JDK1.8부터 static 메서드와 default 메서드를 사용할 수 있다.)
- 다중상속이 가능
interface Fightable extends Movable, Attackable {
}
- 상속하는 집합간에는 연관관계가 존재하지 않을 수 있음
# 추상 클래스 vs 인터페이스
2. 클래스는 무엇이고 객체는 무엇인가요?
# 클래스
- 클래스는 객체를 만들기 위한 확장 가능한 코드 템플릿이며, 상태(멤버 변수) 및 동작(멤버 함수 or 메서드) 구현에 대한 초기값을 제공한다.
# 객체
- 클래스에서 정의한 것을 토대로 메모리(실제 저장공간)에 할당된 것으로, 프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간을 의미하며, 변수, 자료구조, 함수, 메서드가 될 수 있다.
3. 자바의 원시타입들은 무엇이 있으며 각각 몇 바이트를 차지하나요?
4. 접근 제어자의 종류와 이에 대해 설명해주세요.
# 접근 제어자
- 멤버 또는 클래스에 사용되어, 해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할
5. 객체지향에 대해서 설명해주세요.
# 객체지향이란
- 프로그램을 설계하는 개념이자 방법론
- 프로그램을 수많은 '객체(object)'라는 기본 단위로 나누고 이들의 상호작용으로 서술하는 방식
# 객체지향 장점
- 코드 재사용성 증가
상속을 통해 프로그래밍시 코드의 재사용을 높일 수 있다.
- 생산성 향상
잘 설계된 클래스를 만들어서 독립적인 객체를 사용함으로써 개발의 생산성을 향상시킬 수 있다.
- 자연적인 모델링
우리 일상생활의 모습의 구조가 객체에 자연스럽게 녹아들어 있기 때문에 생각하고 있는 것을 그대로 자연스럽게 구현할 수 있다.
- 유지보수의 우수성
프로그램 수정시 추가, 수정을 하더라도 캡슐화를 통해 주변 영향이 적기때문에 유지보수가 쉬워서 매우 경제적이라할 수 있다.
# 객체지향 단점
- 개발속도가 느린점
객체가 처리하려는 것에 대한 정확한 이해가 필요하기에 설계단계부터 많은 시간이 소모 된다.
- 실행속도가 느린점
객체지향언어는 대체적으로 실행속도가 느리다.
- 코딩 난이도 상승
다중 상속이 지원되는 C++ 같은 경우에 너무 복잡해져 코딩의 난이도가 상승할 수 있다.
# 객체지향 특징
OOP is APIE
A - Abstraction 추상화
- 객체의 공통적인 속성과 기능을 추출하여 정의하는 것
P - Polymorphism 다형성
- 상속과 연관있는 개념으로 한 객체가 상속을 통해 기능을 확장하거나 변경하여 다른 여러형태(객체)로 재구성 되는 것
- 한 부모의 밑에서 태어난 자식들이 조금씩 다르다는 것
- 오버로드(Overload) 또는 오버라이드(Override)가 다형성의 대표적인 예
- 다형성을 사용하면 같은 이름의 속성을 유지함으로서, 속성을 사용하기 위한 인터페이스를 유지하고, 메서드 이름을 낭비하지 않는다.
I - Inheritance 상속
- 기존 상위클래스에 기능을 가져와 재사용할 수 있으면서도 동시에 새로운 하위 클래스에 새로운 기능도 추가할 수 있는 것
- 상속이 필요한 이유는 코드의 중복을 없애기 위해서
E - Encapsulation 캡슐화
- 데이터와 코드의 형태를 외부로부터 알 수 없게하고, 데이터의 구조와 역할, 기능을 하나의 캡슐형태로 만드는 방법
- 변수를 private로 선언하여 데이터를 보호하고, 보호된 변수는 getter나 setter등의 메서드를 통해서만 간접적으로 접근을 허용하는 것
OOP는 위 네 가지 특성들을 통해서 어떤 대상을 추상화(Abstraction)하여 공통점을 찾고, 그것을 캡슐화(Encapsulation)해 한 군데에 모아 객체를 만들고, 새로운 객체가 상속(Inheritance)받아 재사용이 가능하게 만들어 준다.
상속받은 객체는 다형성(Polymorphism)을 통해 기능을 수정 또는 추가하여 재사용할 수 있다.
출처
https://onlyfor-me-blog.tistory.com/280
[JAVA] 클래스란? 객체란?
메서드에 이어 이번 포스팅에선 자바로 프로그래밍할 경우 빼먹을 수 없는 요소인 클래스에 대해 기록하려 한다. 먼저 클래스의 사전적 의미는 아래와 같다. Class : 학급, 반, 수업, 수업 학창시
onlyfor-me-blog.tistory.com
24. Java 접근제어자(public ,protected ,default ,private) – triviaLab
Class 접근 제어자 – public , default 두 종류만 존재함 – 하나의 JAVA 파일에는 하나의 Public Class만 존재함 package org.opentutorials.javatutorials.accessmodifier.inner; //public class PublicName {} // Error : 파일명과 publi
trlab.blog
https://gangnam-americano.tistory.com/15
[JAVA] 객체지향 프로그래밍이란?
객체지향 프로그래밍이란? 1. 객체지향 프로그래밍이란? 객체지향 프로그래밍(Object-Oriented Programming)이란 프로그램을 설계하는 개념이자 방법론이다. 줄여서 OOP라 부르며, 단어 뜻 그대로 프로그
gangnam-americano.tistory.com
OOP(객체 지향 프로그래밍)
OOP(객체 지향 프로그래밍)이란 문제를 여러 개의 객체 단위로 나눠 작업하는 방식으로, 객체들이 서로 유기적으로 상호작용하는 프로그래밍 이론이다.대표적으로 Java와 C++이 객체 지향 프로그
velog.io
'CS' 카테고리의 다른 글
Java에 대하여 - 4 (0) | 2022.06.10 |
---|---|
Java에 대하여 - 3 (0) | 2022.06.10 |
Java에 대하여 - 1 (0) | 2022.06.08 |
Spring에 대하여 - 3 (0) | 2022.06.04 |
Spring에 대하여 - 2 (0) | 2022.06.03 |