oop (객체지향이란)?
TRANSCRIPT
객체지향 (OOP)
2015-07-14 / 장철운
이 문서는 나눔글꼴로 작성되었습니다 .
OOP 언어를 사용하면서 , 정작 oop 가 뭔지 몰랐다 …
OOP
컴퓨터프로그램을 명령어의 목록으로 보는 시각에서 벗어나 , 여러 개의 독립된 단위(Object) 들의 모임으로 파악하고자 하는 것 !
Ob-ject
Ob-ject Mes-
sage각각의 독립된 단위 (Object) 들은 서로 메시지를 주고 받으며 데이터를 처리함
EX) Name Jang = New Name(); // 객체 생성 Jang.study(); // < 명령어의 목록이 아닌 Jang 이라는 객체를 통해 프로그래밍 !
Why
Oop 의 특징을 통해 유연성과 확장성을 보장할 수 있기 때문 !
왜 oop 언어를 사용하지 ?
우리가 OOP 를 사용하는 중요한 이유 중 하나는 기존의 시스템에 새로운 기능을 추가하거나 이미 존재하는 기능을 확장 하는 것이 다른 프로그램 언어보다 용이 하기 때문이다 .
특징
Oop 의 특징을 통해 유연성과 확장성을 보장할 수 있기 때문 ! OOP 의 특징으로는
크게 4 가지가 있다 .1. 동적 바인딩2. 상속3. 다형성4. 캡슐화
오오 ! 얘는 들어봄 !!
특징 –바인딩얘 오늘 처음 들어봄 .. 뭐야 …
바인딩 ? 프로그래밍 용어
각종 값들이 확정되어 더 이상 변경할 수 없는 구속 (bind) 상태가 되는 것 .Ex) 변수 , 배열 , 라벨 , 절차 등의 명칭 ( 식별자 ) 이 그 대상인 메모리 주소 , 데이터형 또는 실제 값으로 배정되는 것이 이에 해당한다 .
= 함수를 호출하는 부분에 함수가 위치한 메모리 번지로 연결시켜 주는 것이 바인딩 (Binding)!!
특징 –바인딩
바인딩은 2 가지 종류로 나뉜다 .
정적 바인딩
컴파일링 또는 링크시 확정되는 바인딩을 뜻함
동적 바인딩
프로그램의 실행되는 과정에서 바인딩되는 것보충 : 실행 시간 중에 일어나거나 실행 과정에서 변경될 수 있는 바인딩
보충 : 컴파일 시간에 완료되어 변화하지 않는 바인딩
설명이 좀 부족한데 … ?
특징 – 정적 바인딩
정적 바인딩
컴파일링 또는 링크시 확정되는 바인딩을 뜻함보충 : 컴파일 시간에 완료되어 변화하지 않는
바인딩 - 런타임 중 주소변경 x
정적 타입언어의 장점은 안정성과 효율성이다 .컴파일시에 타입의 많은 정보를 결정 (Binding)하기 때문에 빠르고 , 안정성을 기여할 수 있다 .
Ex) private, final, static 함수 <- static 의 특징을 보면 이해 가능 !
특징 – 동적 바인딩
동적 바인딩은 일반적으로 정적 바인딩에 비해 속도가 느리고 주소를 저장하기 위한 테이블을 사용하기에 공간낭비가 생긴다 .
동적 바인딩
프로그램의 실행되는 과정 ( 런타임 )에서 바인딩되는 것보충 : 실행 시간 중에 일어나거나 실행 과정에서 변경될 수 있는 바인딩
근데 왜 oop 는 얘를 쓰지 ?
다형성 때문 !!!
특징 – 상속다형성전에 상속에 대해 …
사전적 의미 사람의 사망으로 인한 재산상 법률관계의 포괄적 승계 .
OOP 에서의 상속이란 !! 상위클래스 ( 부모 ) 가 그의 속성 ( 함수 등 ) 을 하위클래스 ( 자식 ) 에게 넘겨주는 것을 의미한다 .
여기까진 이해 OK ?
특징 – 다형성
단 , 현실에서도 그렇듯이 부모가 준 속성을 자식이 그대로 받지 않을 수 있다 . 엄마 미안 ..
Cut() 자르
다 !
의사
미용사
수술 할 때 , 매스를 통한 cut
머리를 자를때의 Cut
부모(JOB)
자식
특징 – 다형성
위와 같이 오버라이딩을 통해 같은 명령에 대해 다른 반응을 보이는 특징을 다형성이라고 한다 . 이러한 다형성이 가능한
원인이 동적 바인딩때문 !
JoB job1 = new 의사 ();JoB job2 = new 미용사 ();job1.cut(); // >> 의사의 cut 이 실행job2.cut(); // >> 미용사의 cut 이 실행
특징 – 다시 동적 바인딩
만약 정적 바인딩이라면 이 상황에서 JOB 의 cut 이 실행 . 다형성을 사용할 수 없다 !!
JoB job1 = new 의사 ();job1.cut();
때문에 OOP 에서 동적 바인딩을 사용 !! 바인딩 끗 !(
캡슐화는 나중에 )
OOP 마무리
각각의 독립된 단위 (Object) 들은 서로 메시지를 주고 받으며 데이터를 처리함
소프트웨어 공학의 관점에서 볼 때 S/W 의 질을 향상하기 위해 강한 응집력과 약한 결합력을 지향한다 .
OOP 의 경우 방금 설명한 특징들을 이용하여 응집력을 강화 , 클래스간에 독립적으로 디자인함으로써 결합력을 약하게 할 수 있다 .
Ob-ject
Ob-ject Mes-
sage
이 문서는 나눔글꼴로 작성되었습니다 .
참고 : 뇌를 자극하는 자바 http://secretroute.tistory.com/entry/140819 ( 바인딩 )+ 옆에 있는 선배