Java - 개념정리 1

2022. 4. 5. 14:20Java

반응형

Class, 객체, 인스턴스

class

  • 객체를 만들어내기 위한 설계도, 틀
  • 연관되어있는 변수와 method의 집합

객체

  • 소프트웨어 세계에 구현할 대상
  • 클래스에 선언된 모양 그대로 생성된 실체
  • 특징
  1. 클래스의 instance
  2. 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖는다
  3. 객체지향 관점에서 클래스의 타입으로 선언되었을 때 부르는 말이다

인스턴스(객체)

  • 객체를 실체화한 것
  • 특징
  1. 객체에 포함된다.
  2. 객체지향의 관점에서 객체가 메모리에 할당되어 실제 사용될 때를 뜻한다
  3. 추상적인 개념과 구체적인 객체 사이의 관계에 초점을 맞출 경우에 사용
    • '~의 인스턴스'
    • 객체: 클래스의 인스턴스
  4. 인스턴스는 클래스와 객체 사이의 관계로 한정지을 필요가 없다
  5. 추상적인 개념으로부터 생성된 복제본을 의미한다

예시

/* 클래스 */
public class Animal {
  ...
}

/* 객체와 인스턴스 */
public class Main {
  public static void main(String[] args) {
    Animal cat, dog; // '객체'

    // 객체의 인스턴스화
    cat = new Animal(); // cat은 Animal 클래스의 '인스턴스'(객체를 메모리에 할당)
    dog = new Animal(); // dog은 Animal 클래스의 '인스턴스'(객체를 메모리에 할당)
  }
}

 

클래스, 객체, 인스턴스의 차이

클래스 VS 객체

  • 클래스: 설계도
  • 객체: 설계도로 구현한 모든 대상

객체 VS 인스턴스

  • 클래스 타입으로 선언된 것 VS 객체가 메모리에 할당되어 실제 사용되는 것

 

 


객체지향 프로그래밍

  • OOP(Object Oriented Programing)
  • 특정한 개념의 함수와 자료형을 함께 묶어서 관리하기 위해 탄생한 것!
  • 프로그램을 설계하는 개념이자 방법론
  • 프로그램을 객체라는 기본단위로 나누고, 객체들간의 상호작용을 통해서 프로그램을 설계 및 개발하는 것.
  • 대표적으로 java가 가장 완벽하게 객체지향 프로그래밍을 구현한 언어이다.
  • 상속, extends(확장)

 

객체 지향 설계 과정

  • 제공해야 할 기능을 찾고 세분화, 그 기능을 알맞은 객체에 할당
  • 기능을 구현하는 데 필요한 데이터를 객체에 추가
  • 그 데이터를 이용하는 기능 넣기
  • 기능은 최대한 캡슐화하여 구현
  • 객체 간에 어떻게 메소드 요청을 주고받을 지 결정

 

객체지향 언어의 특징

  1. 캡슐화
    • 낮은 결합도를 유지할 수 있도록 설계하는 것
    • 한 곳에서 변화가 일어나더라도 다른 곳에는 최소한의 영향을 미치게 하는 것
    • 결합도: 어떤 기능을 실행할 때 다른 클래스나 모듈에 얼마나 의존적인가
  2. 정보은닉
    • 다른 객체에 자신의 정보를 숨기고 자신의 연산만을 통하여 접근을 허용하는 것
    • 외부에서 접근할 필요가 없는 것들은 private를 사용하여 접근하지 못하도록 제한을 하는 것
    • 캡슐화에서 높은 응집도와 낮은 결합도를 갖기 위해 사용하는 방법
  3. 추상화
    • 필요로 하는 속성이나 행동을 추출하는 작업
    • 추상적인 개념에 의존하여 설계했을 때 유연함을 갖출 수 있다.
    • 세부적인 사물들의 공통적인 특징을 파악한 후 하나의 집합으로 만들어내는 것
  4. 상속성
    • 일반화 관계(Generalization)
    • 여러 개체들이 지닌 공통된 특성을 부각시켜 하나의 개념이나 법칙으로 성립하는 과정
  5. 다형성
    • 서로 다른 클래스의 객체가 같은 메시지를 받았을 때 각자의 방식으로 동작하는 능력
    • 부모 클래스의 메소드를 자식 클래스가 overriding해서 자신의 역할에 맞게 활용하는 것

 

Override, Overloading

  • Override: 상속
  • Overloading: 다형성

 

SOLID - 객체 지향 설계 원칙

  1. SRP(단일 책임 원칙)
    • 클래스는 오직 하나의 이유로 수정이 되어야 한다.
  2. OCP(개방-폐쇄 원칙)
    • 자신의 확장에는 열려있고 주변의 변화에는 닫혀있어야 한다.
  3. LSP(리스코프 치환 원칙)
    • 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
  4. ISP(인터페이스 분리 원칙)
    • 인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다.
  5. DIP(의존 역전 원칙)
    • 자신보다 변하기 쉬운 모듈에 의존해서는 안 된다.
728x90
반응형

'Java' 카테고리의 다른 글

Java - 개념정리 6  (0) 2022.04.07
Java - 개념정리 5  (0) 2022.04.05
Java - 개념정리 4  (0) 2022.04.05
Java - 개념정리 3  (0) 2022.04.05
Java - 개념정리 2  (0) 2022.04.05