delpho

Java에 대하여 - 2 본문

CS

Java에 대하여 - 2

delpho 2022. 6. 8. 02:22

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

https://trlab.blog/2021_05_14_24-java-%EC%A0%91%EA%B7%BC%EC%A0%9C%EC%96%B4%EC%9E%90-public-protected-default-private/

 

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

https://velog.io/@gillog/OOP%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

 

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