시간날때 천천히 개념 복습.

기본부터 충실히.


1) 객체 지향 언어.


- 가상세계의 현실화

- 현실에서의 상호작용의 주체를 객체(Object)로 이해한다.


예) 자판기에서 물건을 사는 고객이 있다고 할때 이를 

자판기(돈, 제품)

-메서드 : 돈을 받기, 검사하기, 잔돈주기, 제품주기

고객(돈, 제품)

-메서드 : 돈 넣기, 돈 받기, 제품받기 

등으로 쪼개어 이해한다.


- 모듈식으로 구성되므로 코드를 이해하고 유지하고 보수하는데 매우 용이하다.

이를 위해 추상화, 캡슐화 등이 있음(차후 설명)


* 그런데 객체지향의 반대를 절차지향이라 생각하는 것은 조금 위험한 발상 일 수도??

객체 지향이나 절차지향이나 결국 알고리즘, 데이터 플로우 대로 진행 된다. 그렇기에 객체지향과 절차지향을 서로 다르게 이해하는 것이 맞지, 무조건적으로 반대다 라곤 할 수 없다.


즉 절차지향은 프로그래므이 순서와 흐름이 먼저 고려한 후 자료구조와 함수들을 설계하는 방식이고, 객체지향은 자료구조와 함수를 설계한 후 실행순서와 흐름을 짜는 방식으로 이해


# 파이썬 -> 자바-> C언어 순으로 접하다 보니 확실히 모듈식으로 코드를 구성하는 것이 편하고 당연시 여겨진다.


2) 오버로딩과 오버라이딩

2.1) 오버로딩

- 같은 이름의 메서드를 매개변수의 변화를 통해 정의 하는것

- 같은 메서드 이름을 갖고 있으나 매개변수의 개수 또는 타입이 달라야 한다.

- 오로지 매개변수에 의해서 구분이 되어진다.

- 같은 기능을 하지만 서로 다른 인자를 받는 함수를 사용할때 편하다. 


2.2) 오버라이딩

- 조상클래스로부터의 상속 내용을 내 입맛대로 변경하는 것.

- 단 이름, 매개변수, return 타입은 같다.

- tostring 바꿀때 많이 사용했다.


# 오버로딩과 인터페이스, 다시금 정리할 필요가 있다.


3 추상클래스

- 자체로 역할을 하는 클래스는 아니지만 상속을 통해 자손에게 능력을 주는 클래스? 이다.

- 즉 추상클래스를 코드로 구현 후 자손에게 상속한뒤 자손은 이를 '오버라이딩' 해야만 한다.

# 그런데 나는 아직 경험이 없어서 그런지 추상클래스의 필요성을 못느끼겠다. 클래스를 작성할때 조상까지 생각할 겨를도 없고

그럴 필요도 못느낀다. 일을 두배로 하는 느낌? 물론 설계단계에서 추상클래스부터 작성한다면 모르겠지만...


4. 인터페이스

- 얘 역시 다른 클래스에게 도움을 줄 목적으로 만들어진다.

- 추상클래스와의 다른 점은 모양, 생긴것.

- 추상클래스는 말 그대로 클래스이지만 추상적(역할 x)이다.

- 하지만 인터페이스는 오로지 상수 멤버와 추상메서드만을 갖는다.

- 또한 extends와 implements의 차이도 존재한다.

- 한개만 받느냐 여러개를 받느냐..

# 보통 mapper로 인터페이스를 만들어서 사용 했는데 스프링 프로젝트할때는 mapper를 xml로 작성하다보니 이 마저도 사용을 잘 안하게 됬다.

큰그림을 얼마나 보느냐에 따라서 위 두개 개념을 사용하고 안하고가 갈리는 듯 하다.


5. 다형성(polymorphis)

- 같은 모양이 다르개 사용 되는 것?

- 전화기의 키보드, 문자할때의 키보드, 게임할때의 키보드 등... 모양은 같은데 서로 다른 기능을 수행

- 여러가지 형태를 가질 수 있는 능력

- 한 타입의 참조변수로 여러타입의 객체를 참조할 수 있도록 함.

# OOP에서 매우 중요한 개념이긴 한데 오랫만에서 봐서 헷갈림.

다시 정리 필요..


+ Recent posts