[IT info]객체지향 프로그래밍이란?
1. 정의
객체지향 프로그래밍은 문제를 여러 개의 객체 단위로 나눠 작업하는 방식을 말합니다. 이 방식은 오늘 날 가장 많이 사용하는 프로그래밍 방식이고 JAVA, C#등이 대표적인 객체지향 프로그래밍 언어입니다.
Object-Oriented Programming(OOP)라고도 부릅니다.
2. 객체지향 프로그래밍의 특징
1) 추상화
- 객체에서 공통된 속성과 행위를 추출
- 공통의 속성과 행위를 찾아서 타입을 정의
- 추상화는 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단하게 만듦

그럼 추상화가 왜 필요할까요?
자동차로 예를 들어봅시다. BMW, 벤츠, 볼보는 모두 자동차에 해당됩니다. 자동차라는 추상화 집합을 만들어두고 자동차들이 가진 공통적인 특징들을 만들어서 사용합니다. 하지만 현대, 기아와 같이 다른 브랜드들이 추가 될 수도 있겠죠? 이때 자동차를 구현해 놓으면 다른 곳의 코드를 수정할 필요 없이 추가로 만들 부분만 생성해서 넣어주면 됩니다.
2) 캡슐화
- 객체의 속성(data fields)과 행위(methods)를 클래스(class)에 하나로 묶는다.
- 낮은 결합도를 유지할 수 있도록 설계하는 것
- 실제 구현 내용 일부를 내부에 감추어 은닉한다.

객체의 응집도와 독립성을 높임으로서 객체의 모듈화를 지향합니다. 객체의 모듈화가 잘 이루어져있을 경우에는 모듈 단위의 재사용이 매우 용이합니다. 즉 간편한 유지보수가 가능하다는 소리죠.
3) 상속
- 클래스의 속성과 행위를 하위 클래스에 물려주거나 하위 클래스가 상위 클래스의 속성과 행위를 물려받는 것
- 새로운 클래스가 기존의 클래스의 데이터와 연산을 이용할 수 있게 하는 것
상속시 상속받은 객체는 자식, 상속된 객체는 부모라고 말합니다. 자식 객체는 상속된 부모 객체의 은닉화 구성에 따라 정해진 변수나 메서드를 가져와 사용할 수 있습니다.
4) 다형성
- 하나의 변수명, 함수명이 상황에 따라 다른 의미로 해석 될 수 있다.
- 어떠한 요소에 여러 개념을 적용하는 것이다.
다형성은 프로그램 언어 각 요소들이 다양한 자료형에 속하는 것이 허가되는 성질을 말합니다. 즉 하나의 타입에 여러 객체를 대입할 수 있는 성질로 이해하면 편합니다. 무슨 말인지 이해가 안 되신다구요? 간단한 예를 들어봅시다
자바에서 예를 들어볼게요. 자바를 공부하신 분들이라면 System.out.println()이라는 함수 다들 아실 겁니다.
System.out.println()는 하나의 타입만 적을 수 있나요? 아니죠!!
System.out.println("안녕하세요"); // 문자열
System.out.println(9); // 숫자
이렇게 문자열, 숫자 등 다양하게 출력이 가능합니다. 하나의 타입말고 여러 타입의 객체를 넣을 수 있다는게 다형성이라고 생각하시면 될 것 같습니다.
다형성에서 중요한 오버라이딩, 오버로딩에 대해 말씀드리겠습니다.
[오버라이딩]
- 부모클래스에서 상속받은 내용을 자식클래스에서 재정의
- 재정의한 내용을 다시 부모클래스에 덮어 쓸 수 있음
부모 클래스에 있는 필드 또는 메소드를 다른 내용으로 실행시기는 것이 오버라이딩입니다. 간단히 상속해준 부분에 한해 내용(값)을 덮어 쓴다라고 이해하시면 됩니다.
[오버로딩]
- 이름이 같은 메소드에서 파라미터가 다를 경우 각기 다른 행위를 한다.
메서드의 이름이 print 여도 입력된 argument에 따라 알아서 결정해줍니다.
void print (int a, int b)
void print (String arg)