시간날때 천천히 개념 복습.
기본부터 충실히.
1) 객체 지향 언어.
- 가상세계의 현실화
- 현실에서의 상호작용의 주체를 객체(Object)로 이해한다.
예) 자판기에서 물건을 사는 고객이 있다고 할때 이를
자판기(돈, 제품)
-메서드 : 돈을 받기, 검사하기, 잔돈주기, 제품주기
고객(돈, 제품)
-메서드 : 돈 넣기, 돈 받기, 제품받기
등으로 쪼개어 이해한다.
- 모듈식으로 구성되므로 코드를 이해하고 유지하고 보수하는데 매우 용이하다.
이를 위해 추상화, 캡슐화 등이 있음(차후 설명)
* 그런데 객체지향의 반대를 절차지향이라 생각하는 것은 조금 위험한 발상 일 수도??
객체 지향이나 절차지향이나 결국 알고리즘, 데이터 플로우 대로 진행 된다. 그렇기에 객체지향과 절차지향을 서로 다르게 이해하는 것이 맞지, 무조건적으로 반대다 라곤 할 수 없다.
즉 절차지향은 프로그래므이 순서와 흐름이 먼저 고려한 후 자료구조와 함수들을 설계하는 방식이고, 객체지향은 자료구조와 함수를 설계한 후 실행순서와 흐름을 짜는 방식으로 이해
# 파이썬 -> 자바-> C언어 순으로 접하다 보니 확실히 모듈식으로 코드를 구성하는 것이 편하고 당연시 여겨진다.
2) 오버로딩과 오버라이딩
2.1) 오버로딩
- 같은 이름의 메서드를 매개변수의 변화를 통해 정의 하는것
- 같은 메서드 이름을 갖고 있으나 매개변수의 개수 또는 타입이 달라야 한다.
- 오로지 매개변수에 의해서 구분이 되어진다.
- 같은 기능을 하지만 서로 다른 인자를 받는 함수를 사용할때 편하다.
2.2) 오버라이딩
- 조상클래스로부터의 상속 내용을 내 입맛대로 변경하는 것.
- 단 이름, 매개변수, return 타입은 같다.
- tostring 바꿀때 많이 사용했다.
# 오버로딩과 인터페이스, 다시금 정리할 필요가 있다.
3 추상클래스
- 자체로 역할을 하는 클래스는 아니지만 상속을 통해 자손에게 능력을 주는 클래스? 이다.
- 즉 추상클래스를 코드로 구현 후 자손에게 상속한뒤 자손은 이를 '오버라이딩' 해야만 한다.
# 그런데 나는 아직 경험이 없어서 그런지 추상클래스의 필요성을 못느끼겠다. 클래스를 작성할때 조상까지 생각할 겨를도 없고
그럴 필요도 못느낀다. 일을 두배로 하는 느낌? 물론 설계단계에서 추상클래스부터 작성한다면 모르겠지만...
4. 인터페이스
- 얘 역시 다른 클래스에게 도움을 줄 목적으로 만들어진다.
- 추상클래스와의 다른 점은 모양, 생긴것.
- 추상클래스는 말 그대로 클래스이지만 추상적(역할 x)이다.
- 하지만 인터페이스는 오로지 상수 멤버와 추상메서드만을 갖는다.
- 또한 extends와 implements의 차이도 존재한다.
- 한개만 받느냐 여러개를 받느냐..
# 보통 mapper로 인터페이스를 만들어서 사용 했는데 스프링 프로젝트할때는 mapper를 xml로 작성하다보니 이 마저도 사용을 잘 안하게 됬다.
큰그림을 얼마나 보느냐에 따라서 위 두개 개념을 사용하고 안하고가 갈리는 듯 하다.
5. 다형성(polymorphis)
- 같은 모양이 다르개 사용 되는 것?
- 전화기의 키보드, 문자할때의 키보드, 게임할때의 키보드 등... 모양은 같은데 서로 다른 기능을 수행
- 여러가지 형태를 가질 수 있는 능력
- 한 타입의 참조변수로 여러타입의 객체를 참조할 수 있도록 함.
# OOP에서 매우 중요한 개념이긴 한데 오랫만에서 봐서 헷갈림.
다시 정리 필요..
'파이썬' 카테고리의 다른 글
파이썬)메모장, pandas (0) | 2018.05.15 |
---|---|
파이썬) 메모장 (0) | 2018.05.15 |
파이썬과 함께하는 자료구조 8장 그래프(알고리즘) 3번째, 플로이드 마샬 (1) | 2018.05.11 |
파이썬과 함께하는 자료구조 8장 그래프(알고리즘) 2번째, prim (0) | 2018.05.07 |
파이썬과 함께하는 자료구조 8장 그래프(알고리즘) (0) | 2018.05.07 |