• 옛날에는 하드웨어와 소프트웨어의 개발 속도차가 크지 않았지만 지금은 소프트웨어의 속도를 하드웨어가 따라오지 못하는 상황이 발생한다. 그 배경 속에서 객체지향 언어가 나타났다.

 

 

절차지향? (Procedure Programming)

  • 순차적으로 실행하는 구조.
  • 실행 순서가 정해져 있어 코드의 순서가 바뀌면 동일한 결과를 보장하기 힘듬
  • 유지보수가 어려움
  • 컴퓨터의 처리속도와 유사해 실행속도가 빠르다

객체지향? (Object Oriented Programming)

 프로그래밍에서 사용하는 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법.

키워드 5가지

  • 클래스와 인스턴스

클래스: 문제를 해결하기 위한 데이터를 만들기 위해 추상화를 거쳐,

같은 종류의 집단에 속하는 속성(attribute)와 행위(behavior)를 변수와 메서드로 정의한 것

인스턴스: 클래스의 객체. 클래스에서 정의한 것을 토대로 실제 메모리상에 할당된 것, 실제 프로그램에서 사용되는 데이터

 

  • 추상화

불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 공통의 속성이나 기능을 묶어서 이름을 붙이는 것.

주의할 점은 속성 위주가 아닌 기능 위주로 정의하는 작업을 하는 것이다.

 

  • 캡슐화

객체의 데이터를 외부에서 직접 접근하지 못하게 막고, 함수를 통해서만 조작이 가능하게 하는 작업

목적은 코드를 재수정 없이 재활용하는 것.

기능과 특성의 모음을 '클래스'라는 '캡슐'에 분류해서 넣는 것이 캡슐화이다. 그래서 객체가 맡은 역할을 수행하기 위한 하나의 목적을 한데 묶는다.

 

  • 상속

절차지향에서는 라이브러리를 통해서 남의 코드를 가져와 사용할 수 있었다. 하지만 이는 버전에 맞지 않을 수 있고 불필요한 코드 수정이 필요할 수 있다. 그래서 '상속'을 도입. 상속은 부모클래스의 속성과 기능을 그대로 이어받아 사용할 수 있게 하고, 기능의 일부분을 변경해야 할 경우 상속받은 자식 클래스에서 해당 기능만 다시 수정하여 사용할 수 있게 하는 것이다.

 

  • 다형성

하나의 변수명, 함수명 등이 상황에 따라 다른의미로 해석될 수 있는 것.

오버라이딩: 부모클래스의 메서드와 같은 이름, 매개변수를 재정의하는 것.

-> 같은 함수를 올라타서 덮어 씌우고 새롭게 정의하다(riding)

 

오버로딩: 같은 이름의 함수를 여러개 정의하고 매개변수의 타입과 개수를 다르게 하여 매개변수에 따라 다르게 호출할 수 있게 하는 것. 

-> 전혀 다른 함수를 불러오다(loading)

 

 

장점?

  • 코드 재사용이 용이- 클래스를 가져와서 사용가능, 상속을 통해
  • 유지보수가 쉬움 - 클래스 내부의 멤버변수 혹은 메서드의 해당 부분만 수정하면 됨
  • 대형 프로젝트에 적합 - 클래스 단위로 모듈화시켜서 개발, 여러명이 개발할 때 업무 분담이 쉽다.

 

단점?

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

 

 

*메소드: 객체가 수행해야 할 구체적인 연산. 객체의 속성을 조작하는 데 사용됨. 메시지에서 처리됨.

*메시지: 절차지향에서 명령어의 의미. 객체의 특정한 동작을 수행하는 명령어. 객체 간 서로 통신하는 방법.

'CS 공부 > 컴공 기초' 카테고리의 다른 글

[운영체제] kocw 반효경 교수님 강의 정리  (0) 2024.05.19
코틀린(Kotlin)  (0) 2021.01.22
프레임워크(Framework)  (0) 2021.01.22

+ Recent posts