객체지향프로그래밍 OOP

  • 상속, 다형성, 추상화, 캡슐화
  • 사용 목적 : 코드의 재사용성을 극대화, 특정 모듈의 변경이 다른 모듈에 영향을 미치지 않는다
  • 객체 : 구체적, 추상적 데이터의 단위. 여러 명사들

절차 지향 프로그래밍 vs 객체 지향 프로그래밍

  • 절차 지향 프로그래밍
    시간이나 사건의 흐름에 따라 프로그래밍
    C
  • 객체 지향 프로그래밍
    객체를 정의한 후 객체들과의 관계를 통해 프로그래밍
    C++, C#, Python, JS

객체 지향 프로그램을 구현하는 법

  • 객체를 정의하고
  • 각 객체가 제공하는 기능을 구현하고
  • 각 객체가 제공하는 기능들 간의 소통을 통하여 객체 간의 협력을 구현

객체지향의 요소

  • Class : 같은 종류의 집단에 속하는 속성과 행위에 대한 정의, 객체를 만들기 위한 설계도, 설명
  • Object : 클래스의 인스턴스(실제 메모리 할당), 자신의 고유 데이터를 갖고 행위를 수행

객체지향프로그래밍의 특징 4가지

  1. 상속 - 하나의 클래스와 상속관계를 통해 상위 클래스의 필드와 메서드르르 획득하여 상위 클래스의 필드, 메서드를 재사용
  2. 다형성 - 상황에 따라 메서드의 성질을 변화시키는 것
    메서드의 오버라이딩
  3. 추상화 - 객체들이 가진 공통 특성을 파악하고 불필요한 특성을 제거하는 과정으로, 단순화하여 세부 정보를 숨기고 기능을 표시하는 것
    추상 클래스 - 상속 클래스/인터페이스 - 인터페이스 구현. 그리고 클래스/인터페이스를 리모컨으로 사용
  4. 캡슐화 - 하나의 문제해결을 위한 데이터와 메서드의 묶음으로, 외부 접근을 차단한다

클래스와 객체

  • 클래스로 모델링한 객체를 정의
  • 클래스는 필드, 메소드, 생성자, 블럭, 중첩 클래스 및 인터페이스를 포함할 수 있다
  • 객체는 클래스의 인스턴스
  • 객체는 메모리의 주소를 포함하고 있다

객체지향 설계 5대 원칙

  1. SRP(단일 책임 원칙)
  • 모든 클래스는 각각 하나의 책임만 가지고 단일 기능을 수행
  • 코드가 정확하고 코드를 쉽게 유지/관리할 수 있다
  1. OCP(개방-폐쇄의 원칙)
  • 기존의 코드를 변경하지 않으면서, 기능을 추가할 수 있도록 설계
  • 확장을 통해 모듈에 새로운 기능을 구현할 수 있다
  1. LSP(리스코프 치환 원칙)
  • 자식 클래스는 언제나 부모 클래스를 대체하여 동작하는데 문제가 없어야 한다 (다형성)
  1. ISP(인터페이스 분리 원칙)
  • 한 클래스는 자신이 사용하지 않는 인터페이스를 구현하면 안된다
  • 여러 개의 구체적인 인터페이스로 분할한다
  1. DIP(의존석 역전 원칙)
  • 의존 관계를 구체적인 구현 클래스 대신 추상화된 추상 클래스나 인터페이스에 의존해야 하며,
    고수준 모듈에서 저수준 모듈에 의존해서는 안된다(?)

SOLID원칙 사용 이유

  • 다른 코드 블록에 영향을 주지 않고 코드 블록을 변경할 수 있도록 종속성을 줄일 수 있다
  • 디자인을 더 쉽고 이해하기 쉽게 만들기 위한 원칙
  • 시스템을 유지 관리, 테스트, 확장 및 재사용할 수 있다

제어자

  • 클래스, 변수, 메소드의 선언부에 사용되며 부가적인 의미를 부여한다
  • 접근 제어와 그외 제어자로 나뉜다
  • 접근 제어자 : public, protected, default, private
  • 그 외 : static, final, abstract, native, transient, synchronized, volatile,
    strictfp

접근제어자


  • public
    특별히 공용 상수로 정의하는 것 외에 public으로 선언하는 경우는 없다
  • private
    클래스 외부에서 접근할 수 없다
    클래스 선언 시에 사용이 안된다
    상속관계의 하위 클래스에서도 접근할 수 없다
    캡슐화 보장, 클래스의 데이터 필드 보호에 사용
    생성자에 선언하여 상속을 제한할 때도 사용
  • protected
    상속 관계인 하위 클래스 간의 접근이 허용
    상속 관계의 다른 패키지의 클래스에서도 접근 가능
  • default
    별도 접근 제어자 지정이 없을 경우
    동일 패키지에서만 접근 가능

생활 속의 객체를 클래스로 구현해보기

  • 클래스는 객체의 청사진
  • 객체의 속성은 클래스의 멤버변수로 선언한다
  • 학생 클래스
public class Student{
	int ~;
    String~;
}
  • 하나의 클래스 파일 안에 여러 개의 클래스가 만들어질 수 있지만 public은 단 한 개만 붙어야 하고
    public 클래스와 .java파일 명은 동일하다
  • 클래스는 대문자로 시작
  • 낙타 표기법을 사용
profile
안녕하세요. Chat JooPT입니다.

0개의 댓글