{WIL 2 TIL 14} 객체 지향 프로그래밍 (OOP)

YeilieY·2022년 10월 2일
0

항해99

목록 보기
19/27
post-thumbnail

객체 지향 프로그래밍 (OOP)

  • Object Oriented Programming

객체 지향 프로그래밍이란?

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

객체 지향 프로그래밍의 장점

  • 다른 사람이 만든 클래스를 가져와서 이용할 수 있고 상속을 통해 확장해서 사용할 수 있기 때문에 코드 재사용에 있어 용이하다.
  • 절자 지향 프로그래밍은 코드 수정 시 하나씩 다 찾아 수정해야하는 반면 객체 지향 프로그래밍은 수정해야 할 부분이 클래스 내부에 멤버 변수 or 메서드로 존재하기 때문에 해당 부분만 수정하면 된다. 그러므로 유지보수가 쉽다!
  • 클래스 단위로 모듈화 시켜서 개발이 가능하므로 여러 명, 여러 회사에서 프로젝트를 개발할 때 업무를 분담하기 쉽기 때문에 대형 프로젝트에 적합하다.

객체 지향 프로그래밍의 단점

  • 객체가 많으면 용량이 커질 수 있다.
  • 설계 시 많은 시간과 노력이 요구된다.
  • 처리 속도가 상대적으로 느리다.

객체 지향 프로그래밍의 중요한 포인트 5가지

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

    클래스: 어떤 문제를 해결하기 위한 데이터를 만들기 위해 추상화를 거쳐 집단에 
    속하는 속성과 행위를 변수와 메서드로 정의한 것이다.
    (객체를 만들기 위한 메타정보)
    
    인스턴스(객체): 클래스에서 정의한 것을 바탕으로 실제 메모리에 할당된 것으로
    실제 프로그램에서 사용되는 데이터 이다.
  2. 추상화 (자료의 추상화)

    객체 지향 프로그래밍에서는 '추상화' 라는 단어를 여러 부분에 붙일 수 있다.
    여기서 말하는 추상화는 추상 클래스나 추상 클래스가 갖는 추상 메서도를 의미하기
    보다는 클래스를 설계하는 것 자체를 의미한다.
    (공통의 속성이나 기능을 묶어 이름을 붙이는 것이다.)
  3. 캡슐화

    코드를 재수정 없이 재활용 하는 것이다. 
    절차 지향 프로그래밍 에서도 라이브러리를 통해서 함수를 재활용이 가능은 했지만
    코드의 수정이 일어났을 때 영향 범위를 예상하기 어려운 문제가 있었다. 그러나 
    객체 지향 프로그래밍은 캡슐화를 통해 객체가 외부에 노출하지 않아야 할 정보 
    또는 기능을 접근제어자를 통해 적절하게 제어 권한이 있는 객체에서만 접근하도록
    할 수 있기에 코드의 수정이 일어났을 때 책임이 있는 객체만 수정하면 된다. 
    그러므로 영향 범위를 예측하는 것에 있어 훨씬 수월해졌다.
    (기능과 특성들을 "클래스" 라는 캡슐에 분류해서 넣는 것이 "캡슐화" 이다.)
  4. 상속

    절자 지향 프로그래밍에서도 라이브러리를 통해서 다른 사람이 짜놓은 소스 코드를 
    가져와 사용할 수 있었다. 그러나 나의 의도에 맞게 수정하게 되면 다른 라이브러리가 
    되어버려서 버전에 따라 동작하지 않을 수 있고 불필요한 코드의 수정작업을 해야 
    한다는 불편함이 있었다. 이런 여러 문제들을 해결하기 위해 "상속" 이라는 것을
    사용하게 되었다.
    ""상속"" 은 부모클래스의 속성과 가능을 그대로 이어받아 사용할 수 있게 하고 
    기능의 일부분을 변경해야 할 경우 상속받은 자식 클래스에서 기능만 다시 수정 혹은
    정의 하여 사용할 수 있게 하는 것이다.
    (다만, 다중상속은 불가하다.)
  5. 다형성

    하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있는 것이다. 즉, 
    Overriding(오버라이딩), Overloading(오버로딩) 이 가능하다는 얘기이다.

▶ 2주차를 마무리하는 두번 째 WIL 을 작성했다. Java 라는 언어는 너무가 광범위해서 단기간에 정확하게 세부적으로 100% 다 깨우치게 되는 못하더라도 Java 라는 언어에 있어 전체적인 흐름과 정말 중요한 포인트들은 꼭 기억을 계속 상기 시키며 짚어넘어가며 언어를 공부하는 것이 나중을 위해서 좋을 것 같다고 느낀다. 이 항해가 끝나는 시점에는 Java+SpringBoot 에 대해서 어디 가서도 편하게 자신있게 설명할 수 있는 개발자가 되기 위해 열심히 노력할 것이다.
내일이면 3주차가 시작되는데 3주차도 화이팅!!! ◀

profile
Fun_Dev

0개의 댓글