객체지향프로그래밍(OOP)

임준철·2021년 4월 11일
0

OOP

목록 보기
5/6

객체지향 프로그래밍(Object Oriented Programming, OOP)

객체지향 프로그래밍이란?

컴퓨터 프로그래밍 패러다임 중 하나로, 프로그램을 명령어의 목록으로 보는 시각에서 벗어나, 독립된 단위인 객체의 모임으로 파악하는 것이다.
각각의 객체는 메세지를 주고받고, 데이터를 처리한다.
프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고,
그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법(객체 간의 협력을 구현)

객체지향 프로그래밍의 장점

  • 코드의 재사용성이 용이하다.
  • 유지보수가 쉽다.
  • 대규모 프로젝트에 적합하다.

객체지향 프로그래밍의 단점

  • 처리속도가 상대적으로 느리다.
  • 객체가 많으면 용량이 커질 수 있다.
  • 설계시 많은 시간과 노력이 필요하다.

객체지향의 기본 구성 요소

  • 클래스(Class)
    • 같은 종류의 집단에 속하는 속성과 행위를 정의한 것
    • 클래스는 다른 클래스 또는 외부 요소와 독립적으로 디자인해야 함
  • 객체(Object)
    • 클래스의 인스턴스로, 실제로 메모리상에 할당된 것
    • 자신 고유의 속성을 가지며, 클래스에 정의된 행위를 수행
    • ex) 사람, 자동차, 주문, 생산, 관리
  • 메소드(Method)
    • 클래스로부터 생성된 객체를 사용하는 방법
    • 메소드는 속성(변수)을 변화시키는 데에 사용한다.
      • 정적 메소드는 정적 변수들을 변화시키고, 인스턴스 메소드는 객체의 속성을 변화시킨다.
    • 꼭 속성을 변화시키는 것은 아니고, 주요 기능이 속성을 변화시키는 것이다.

객체지향의 특징

  1. 추상화(Abstraction)

    • 객체지향에서 추상화란 객체에서 공통된 속성과 행위를 추출하는 것을 의미한다.
    • 예를 들어, 자동차의 종류 중에 소나타, 아반떼, 그랜져, 제네시스 등이 있을 때
      이것들을 자동차라는 클래스를 만들어 세부적인 기능들은 다 다르지만, 공통적인 속성과 행위에 대한 개념을 정의한 것이다.
    • 객체를 클래스로 추상적인 개념으로 만드는 것 추상화, 클래스를 객체로 만드는 것이 인스턴스화라고 한다.
  2. 캡슐화(Encapsulation)

    • 캡슐화는 연관 있는 변수와 메소드를 묶어주는 작업을 말한다.
    • 접근 제어자(private)를 통해 외부로부터 접근을 제한하여 객체 내에서만 접근이 가능하도록 하며, 이를 정보은닉이라고 한다.
    • 외부 클래스에서의 직접적인 접근으로 발생하는 변경이나 오류를 막음으로써 보안성이 높아진다.
  3. 상속(Inheritance)

    • 현실에서 부모의 재산이나 특징들을 자식이 이어받는 상속의 개념을 프로그래밍적으로 적용한 개념으로,
      부모 클래스의 속성과 기능을 이어받아 자식 클래스에서 사용할 수 있는 것을 말한다.
    • 코드의 중복성을 줄여주는 역할을 한다.
  4. 다형성(Polymorphism)

    • 한 타입의 참조 자료로 여러 타입의 객체를 참조할 수 있도록 하는 것으로, 동일한 변수, 함수명 등이 다양한 형태로 정의되는 것을 말한다.
    • 오버 로딩(Overloading)과 오버 라이딩(Overriding)이라는 형태로 다양하게 기능들을 정의할 수 있다.
    • 오버로딩 : 같은 이름의 메소드 여러 개를 가지면서 매개 변수의 자료형과 개수를 다르게 구현한 것이다.
        class Anmimal{
           String name;
           int age;
           public Animal(){
                name = "홍길동";
                age = 14;
           }
           public Animal(String name, int age){
                 this.name = name;
                 this.age = age;
           }
        }
    • 오버라이딩 : 부모 클래스가 가지고 있는 메소드를 하위 클래스가 재정의해서 사용하는 것을 말한다.
        class Anmimal{
           void move(){
             System.out.println("동물이 이동합니다");
           }
        }
    
        class Cat extends Anmimal{
            @Override
            void move(){
               System.out.println("고양이가 이동합니다.");
            }
        }
profile
지금, 새로운 문을 열자! 문 저편에 무엇이 있을지 두렵더라도!!

0개의 댓글