항해99

항해99 WIL.2 객체지향 프로그래밍이란?(OOP)

밍튜 2022. 7. 24. 23:24
  • 첫 항해를 시작하고 이번주에 배운 점

-이번주는 처음으로 Spring을 활용해서 end to end로 게시판(?)을 하나 완성했다

-왼쪽에서 오른쪽으로 클라이언트->서버->DB까지 가는동안 일어나는 일들을 하나씩 공부했다

-JPA, Repository, Service, Controller, DTO 그리고 웹개발종합반때 했던 HTML과 자바스크립트 , CSS까지 다했다...

출처:항해99 웹개발의봄 Spring자료

 

 

  • 느낀 점

-하면서 이게 맞는건가 싶어서 1주차랑 2주차를 계속 반복했다

 

-자꾸 이해가 안가고 계속 같은 단어들이 코드내에서 반복되면서 엄청 헷갈렸다... 그래서 강의도 계속 돌려보고 코드도 돌아가봐도 머리만 어지러웠다...

 

-그냥 에라모르겠다라는 식으로 끝까지 만들어보고 다시만들고를 반복하니 세세하게는 잘 기억이 안나도 전체적인 틀은 아주아주아주아주아주 살짝 이해가 가는거같다....가도 또 돌아보면 기억이안난다.

 

-더열심히 해봐야겠다!!! 나는 할수있다!!!!!!!!!!!될때까지 한다!!!

 

 


1)객체지향 프로그래밍이란? (Object Oriented Programming)

 

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

다시 말해, 속성과 기능을 가진 객체들을 레고 블럭처럼 조립해서 하나의 프로그램을 만드는 것을 객체 지향 프로그래밍이라고 할 수 있다.

 

 

2. 객체 지향 프로그래밍의 장, 단점은?

장점

  • 코드 재사용이 용이
    >> 기존에 만들어진 클래스를 재사용할 수 있고 상속을 통해 확장 가능
  • 유지 보수가 편리
    >> 수정해야 할 부분이 클래스 내부에 있으므로 해당 부분만 수정하면 됨.
  • 대형 프로젝트에 적합
    >> 클래스 단위로 모듈화시켜서 개발 -> 업무 분담의 편리성 향상

단점

  • 처리속도가 상대적으로 느림
  • 객체의 수 증가 >> 용량이 커질 수 있음
  • 설계시 많은 시간과 노력이 필요
    >> 좋은 객체를 만드는 것을 다른 말로 설계를 잘하는 법이라고 할 수 있는데,  좋은 설계는 현실을 잘 반영해야 한다.

 

3. 객체 지향 키워드 5가지

1) 클래스 + 인스턴스(객체)

클래스

집단에 속하는 속성과 행위를 변수와 메소드로 정의한 것.

  • 어떠한 객체의 상태를 나타내는 변수와 행동을 나타내는 메소드의 집합
  • 객체를 정의하는 틀, 설계도

인스턴스(객체)

클래스에서 정의한 것을 토대로 실제 메모리상에 할당 된 것.
클래스로부터 객체를 선언하는 과정을 클래스의 인스턴스화 라고 한다.

클래스=빵틀  / 객체 = 빵틀에서 나온 빵

클래스를 통해 생성된 인스턴스들은 서로 다른 각자의 이름을 가지고 있고 속성과 기능을 독립적으로 갖는다.

2) 추상화 (자료의 추상화)

객체들이 공통적으로 필요로 하는 속성이나 동작을 하나로 추출해내는 작업

추상적인 개념에 의존하여 설계해야 유연함을 갖출 수 있다. 즉, 세부적인 사물들의 공통적인 특징을 파악한 후, 하나의 묶음으로 만들어내는 것이 추상화다.

예를들어 '평생 못 사는 자동차'라는 추상화 집합을 만들어두고, 평생 못 사는 자동차들이 가진 공통적인 특징들 (매우 비쌈, 빵빵한 배기음 등) 을 만들어 활용하면 된다.

 '부가티'와 같은 다른 '평생 못 사는 자동차'가 추가될 수 있는데, 이 때 추상화로 구현해두면 다른 코드는 건드리지 않고 추가로 만들 부분만 새로 만들어주면 된다.

3) 캡슐화

데이터 구조와 데이터를 다루는 방법들을 결합 시켜 묶는 것.
>>변수와 함수를 하나로 묶는 것을 뜻한다.
캡슐화를 통해 관련된 기능과 특성을 한 곳에 모으고 분류하기 때문에 재활용이 원활해지는 효과가 있다.

>>객체 각각은 독립적으로 작용할 수 있도록 응집도 강해야 하고 다른 모듈을 참조하는 결합도는 낮아야 함!

4) 상속

상위 개념의 특징을 하위 개념이 물려받은 것
부모 클래스의 속성과 기능을 그대로 물려받아 사용할 수 있고, 기능의 일부분을 변경해야 할 경우 상속받은 자식 클래스에서 해당 기능만 다시 수정하여 사용할 수 있다.

5) 다형성

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

  • 오버라이딩 : 부모클래스의 메소드와 같은 이름, 매개변수를 재정의 하는 것.
  • 오버로딩 : 같은 이름의 함수를 여러개 정의하고 매개변수의 타입과 개수를 다르게 하여 매개변수에 따라 다르게 호출할 수 있도록 하는 것.

+) getter, setter 사용 이유

getter, setter을 사용하면 메소드를 통해 접근하기 때문에, 올바르지 않은 입력에 대해 사전에 처리할 수 있도록 제한하거나 조절할 수 있기 때문이다.