-
[Java]객체 지향 프로그래밍(Object Oriented Programming)Java 2021. 11. 25. 01:35728x90
자바의 특징하면 객체지향 프로그래밍 언어라는 말이 항상 나오는데 정확히 객체 지향 프로그래밍이란 무엇인지 궁금해서 찾아보게 되었습니다.
객체 지향 프로그래밍(OOP)란 무엇인가?
객체 지향 프로그래밍은 컴퓨터 프로그래밍 패러다임 중 하나로, 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.
객체 지향 프로그래밍의 장, 단점은 무엇인가?
-장점
코드 재사용 용이
남이 만든 클래스를 가져와서 이용할 수 있고 상속을 통해 확장하여 사용할 수 있다.
유지보수가 쉬움
절차 지향 프로그래밍에서는 코드를 수정하려면 일일이 찾아야 하지만 객체 지향 프로그래밍에서는 수정할 부분이 클래스의 내부 멤버 변수 혹은 메서드로 존재하기 때문에 해당 부분만 수정하면 된다.
우리가 어떤 물품을 누군가에게 택배를 보낸다고 가정해보겠습니다.
절차 지향 프로그래밍은 어떤 물품을 직접 만들고 내가 직접 전달한다고 한다면
객체 지향을 사용한다면 어떤 물품을 A 마트에서 사서 B 택배사를 통해 누군가에게 전달합니다.
객체 지향을 사용하다가 만약에 A마트에서 어떤 물품을 사용할 수 없다면 어떻게 될까요?
내가 해야 하는 일은 A마트가 아닌 B마트에서 어떤 물품을 사는 것 빼고는 변하지 않습니다.
대형 프로젝트에 적합
클래스 단위로 모듈화시켜 개발할 수 있으므로 여러 명, 여러 회사에서 프로젝트를 개발할 때 업무 분담하기 쉽다.
단점
처리 속도가 상대적으로 느림
객체가 많으면 용량이 커질 수 있음
설계 시 많은 시간과 노력이 필요
객체지향의 특징은?
1. 클래스 + 인스턴스(객체)
클래스란?
데이터를 추상화하기 위해 집단에 속하는 속성과 행위를 변수, 메서드로 정의한 것
TV를 추상화한다면 TV의 속성과 행위를 변수(크기, 길이, 높이, 색상), 메서드(켜기, 끄기, 볼륨 높이기, 채널 변경하기) 등으로 정의하는 것입니다.
속성을 멤버변수 , 행위(기능)를 메서드라고 합니다.
인스턴스란?
클래스로부터 객체를 만드는 과정을 인스턴스화라고 하며, 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 합니다.
클래스는 제품의 설계도면으로 객체는 제품으로 이해하면 쉽습니다.
2. 추상화
불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 공통의 속성이나 기능을 묶어 이름을 붙이는 것
클래스 설계하는 것 자체를 의미합니다.
3. 캡슐화
클래스라는 캡슐에 기능과 특성을 넣는 것을 캡슐화라고 합니다.
캡슐화를 통해 객체가 외부에 노출하지 않아야 할 정보 또는 기능을 접근제어자를 통해 적절히 제어 권한이 있는 객체에서만 접근하도록 할 수 있습니다.
또한 캡슐화를 통해 재사용성이 증가합니다.
getter, setter의 활용
멤버변수에 직접 접근하기 못하게 private로 지정하고 getter, setter 메서드를 통해서 접근한다.
메서드를 통해 접근하기 때문에 올바르지 못한 입력값이 들어오면 사전 처리가 가능하며, 출력 값 또한 변수에 여러 가지를 더하거나 빼던 무언가를 하여 출력할 수 있다.
4. 상속
절자 지향 프로그래밍에서도 "라이브러리"를 통해서 남이 짜 놓은 소스 코드를 사용할 수 있습니다.
하지만 내 입맛에 맞게 수정하고 싶은 상황이 있는데 이를 상속을 통해 해결할 수 있습니다.
상속은 부모클래스의 속성과 기능을 그대로 이어받아 사용할 수 있고 추가적으로 자식 클래스에서 기능의 일부분을 변경하고 싶으면 해당 기능만 다시 수정하여 사용할 수 있습니다. ( 이때 오버 라이딩(다형성)이 활용됩니다)
5. 다형성
하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있습니다.
오버 라이딩(Overriding), 오버 로딩(Overloading)이 가능합니다
오버 라이딩: 부모클래스의 메서드와 같은 이름, 매개변수를 재정의 하는 것
오버 로딩 : 같은 이름의 함수를 여러 개 정의하고, 매개변수의 타입과 개수를 다르게 하여 매개변수에 따라 다르게 호출하는 것
출처
https://jeong-pro.tistory.com/95
'Java' 카테고리의 다른 글
[Java] 배포란?(+ CI/CD) (0) 2021.12.03 [Java] 빌드란?(+빌드 도구) (0) 2021.11.30 [Java] 얕은 복사와 깊은 복사 (0) 2021.11.15 [Java] Code Convention(코드 컨벤션) (0) 2021.11.10 [Java] StringTokenzier 와 split 의 차이 (0) 2021.11.10