crossorigin="anonymous"> $(function(){ $('.article_view').find('table').each(function (idx, el) { $(el).wrap('
') }); $('img[alt="N"]').each(function(){ $(this).replaceWith('

N

') }); });

새소식

왕초보만/기초 왕초보만

뻘짓 하며 얻은 기본기 9 객체지향프로그래밍의 특징 OOP

  • -

 

 

우리는 객체지향언어를 공부합니다. 그럼 객체지향이란 무엇일까요?

 

객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 데이터와 그 데이터를 조작하는 함수를 하나의 객체로 묶어 사용하는 프로그래밍 패러다임입니다. 이 패러다임은 실제 세상에 존재하는 개체를 소프트웨어 내에서 모델링하는 데 중점을 둡니다. 객체 지향 프로그래밍은 코드의 재사용성과 확장성을 높여주고, 유지보수를 쉽게 해주는 특징을 가지고 있습니다.

객체 지향 프로그래밍의 핵심 개념

  1. 클래스(Class)
    클래스는 객체를 정의하는 틀 또는 설계도입니다. 클래스는 속성(데이터)과 메서드(함수)를 정의하여 객체가 어떤 특성과 행동을 가지는지 결정합니다.
  2. 객체(Object)
    객체는 클래스를 기반으로 생성된 인스턴스(instance)로, 클래스에 정의된 속성과 메서드를 실제로 사용할 수 있게 해주는 개체입니다. 프로그램 내에서 실제 데이터를 담고 있는 실체로 볼 수 있습니다.
  3. 캡슐화(Encapsulation)
    캡슐화는 객체의 속성과 메서드를 하나로 묶어 외부에서 접근하지 못하도록 보호하는 개념입니다. 이를 통해 객체의 내부 구현을 숨기고 필요한 경우에만 외부와 소통할 수 있는 인터페이스를 제공합니다.
  4. 상속(Inheritance)
    상속은 기존 클래스의 특성과 기능을 확장하여 새로운 클래스를 정의하는 방법입니다. 상속을 통해 코드의 재사용성을 높일 수 있으며, 계층 구조를 통해 공통된 특성을 공유하는 클래스를 만들 수 있습니다.
  5. 다형성(Polymorphism)
    다형성은 동일한 메서드나 연산자가 다양한 클래스에서 다른 방식으로 동작할 수 있도록 하는 개념입니다. 이를 통해 같은 메서드 호출이 객체에 따라 다른 동작을 수행하도록 할 수 있습니다.
  6. 추상화(Abstraction)
    추상화는 불필요한 세부사항을 숨기고, 필요한 부분만을 노출하는 개념입니다. 이를 통해 복잡한 시스템을 단순하게 표현하고, 객체 간의 상호작용을 쉽게 이해할 수 있도록 합니다.

장점

  • 코드 재사용성: 상속을 통해 기존 코드를 재사용할 수 있습니다.
  • 유지보수 용이성: 모듈화된 객체를 관리하기 때문에 유지보수가 쉽습니다.
  • 유연성과 확장성: 다형성으로 인해 코드를 유연하게 작성할 수 있습니다.
  • 현실 세계의 모델링: 객체 간 상호작용을 통해 현실 세계를 보다 직관적으로 모델링할 수 있습니다.

 

객체 지향 프로그래밍이랑 대응되는 언어는 대표적으로 절차지향 프로그래밍을 듭니다.

 

절차 지향 프로그래밍(Procedural Programming)은 프로그램을 여러 개의 절차나 함수로 나누어 순차적으로 실행하는 방식의 프로그래밍 패러다임입니다. 절차 지향 프로그래밍은 문제 해결을 위해 필요한 작업의 흐름(절차)을 정의하고, 그 절차들을 함수로 분리해 사용하는 데 중점을 둡니다.

 

절차 지향 프로그래밍의 특징

 

  1. 순차적 실행
    프로그램은 순차적으로 실행됩니다. 각 함수나 절차가 정의된 순서대로 실행되며, 각 단계에서 특정 작업을 수행합니다.
  2. 함수(또는 절차) 기반 구조
    함수를 통해 특정 작업을 분리하고 이를 재사용하는 방식으로 프로그램을 구성합니다. 함수는 특정 작업을 수행하도록 설계된 코드 블록이며, 여러 번 호출하여 중복을 줄이고 코드의 가독성을 높일 수 있습니다.
  3. 전역 변수와 지역 변수
    전역 변수를 사용해 여러 함수가 공통으로 접근할 수 있는 데이터를 유지하고, 함수 내에서 필요한 경우 지역 변수를 정의하여 데이터를 관리합니다. 이로 인해 데이터가 공유될 수 있지만, 전역 변수 사용이 많아지면 코드의 복잡성과 유지보수가 어려워질 수 있습니다.
  4. 모듈화된 코드
    절차 지향 프로그래밍에서는 코드의 일관성과 가독성을 높이기 위해 작업을 여러 모듈로 나누어 구성합니다. 이를 통해 프로그램의 특정 부분을 쉽게 이해하고 수정할 수 있습니다.

장점

  • 간단하고 직관적: 프로그램의 흐름이 순차적이고 직관적이므로 이해하기 쉽습니다.
  • 함수를 통한 재사용성: 함수를 사용하여 코드 중복을 줄이고, 필요할 때 재사용할 수 있습니다.
  • 성능: 객체 지향 프로그래밍에 비해 상대적으로 간단한 구조를 가지므로 성능이 높을 수 있습니다.

단점

  • 확장성과 유지보수의 어려움: 코드가 커질수록 복잡해져 수정이 어려워지며, 전역 변수를 사용하게 될 경우 다른 함수와의 연관성 때문에 오류를 추적하기 어려워집니다.
  • 유연성의 부족: 프로그램의 요구 사항이 변화할 때, 절차 지향 프로그래밍은 전체 프로그램의 구조를 바꾸어야 할 수 있습니다.
  • 데이터와 기능의 분리: 절차 지향 프로그래밍에서는 데이터를 함수와 별도로 다루기 때문에, 객체 지향 프로그래밍처럼 데이터와 기능이 하나로 묶여 있지 않아 코드의 일관성을 유지하기 어렵습니다.

 

절차 지향 프로그래밍의 대표적인 언어

 

C, Pascal 등이 절차 지향 프로그래밍 언어로 널리 사용되었으며, 특히 C 언어는 시스템 프로그래밍, 운영체제 개발 등에 많이 활용되어 왔습니다.

 

면접에서 물어보는 OOP의 특징

 

1. 캡슐화(Encapsulation)

: 캡슐화란 객체의 필드, 메소드를 하나로 묶고, 실제 구현 내용을 감추는 것을 말합니다.

외부 객체는 객체내부의 구조를 알지 못하며 객체가 노출해서 제공하는 필드와 메소드만 이용할 수 있습니다.

 

이렇게 캡슐화를 하는 이유는 외부의 잘못된 사용으로 인해 객체가 손상되지 않도록 하기 위함입니다.

자바언어는 캡슐화된 멤버를 노출시킬지, 숨길 것인지를 결정하기 위해

접근제한자를 사용합니다.

접근제한자는 객체의 필드와 메소드의 사용범위를 제한함으로써 외부로부터 보호합니다.

 

2. 상속(Inheritance)

: 상속이란 객체 지향 프로그래밍에서 부모역할의 상위객체가 자기가 가지고 있는 필드와 메소드를 자식역할의 하위 객체에게 물려주어 하위객체가 사용할 수 있도록 해주는 것입니다.

 

상속은 상위객체를 재사용함으로써 하위 객체를 쉽고 빨리 설계할 수 있도록 도와주고, 이미 잘 개발된 객체를 재사용해서 새로운 객체를 만들기 때문에 반복된 코드의 중복을 줄여줍니다.

 

3. 다형성(Polymorphism)

: 다형성은 같은 타입이지만 실행결과가 다양한 객체를 이용할 수 있는 성질을 말합니다. 코드 측면에서 보면 다형성은 하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용할 수 잇게 해줍니다.

 

Contents