:) Java의 가장 큰 특징인 "객체지향언어"에 대해 설명할게욥
- 객체지향언어(Object-Oriented Language, OOL)는 프로그래밍의 한 패러다임으로, 데이터와 함수를 객체로 캡슐화하여 소프트웨어의 설계와 구현을 단순화하는 것을 목표로 한다.
- 객체지향 프로그래밍(Object-Oriented Programming, OOP)은 프로그램을 객체의 집합으로 모델링하여, 프로그램의 구조와 동작을 이해하고 관리하기 쉽게 만든다.
객체는 데이터(속성)와 그 데이터를 처리하는 함수(메소드)를 하나의 단위로 묶은 것이다.
- 클래스라는 구조를 통해 객체의 틀을 정의하고, 이 클래스를 기반으로 객체(인스턴스)를 생성하여 프로그램을 구성한다.
캡슐화는 객체의 데이터(속성)와 이 데이터를 조작하는 메소드(함수)를 결합하여 하나의 단위, 즉 '클래스'로 묶는 것이다.
이 과정에서 중요한 것은, 객체의 세부 구현을 외부에서 직접 접근할 수 없도록 숨기고(은닉), 필요한 정보나 기능만을 외부에 공개하는 것것(인터페이스 제공).
ex) 자동차 객체를 생각해보면, 엔진의 세부 사항을 직접 조작하기보다는, 가속하거나 멈추는 행위를 메소드로 제공하여 안전하게 차를 운전할 수 있게 한다다.
상속은 기존 클래스(부모 클래스)의 속성과 메소드를 새로운 클래스(자식 클래스)가 물려받아 사용할 수 있게 하는 메커니즘이다.
이를 통해 코드의 재사용성을 높이고, 유지보수의 편리성을 제공한다.
ex) '동물' 클래스에는 '먹기'와 '움직이기' 같은 기본적인 메소드가 정의되어 있고, '고양이' 클래스는 '동물' 클래스로부터 이 메소드들을 상속받아 추가적인 기능(예: '야옹 울기')을 구현할 수 있다.
ex) '그리기' 메소드가 '원', '사각형', '삼각형' 클래스에 각각 구현되어 있을 때, '그리기' 메소드를 호출하면 각 객체의 형태에 맞는 그림을 그리게 된다. 이는 같은 인터페이스를 통해 다양한 방식의 실행을 가능하게 한다.
ex) "소리내기"라는 동일한 메소드를 가진 여러 동물 객체(개, 고양이, 새)가 있을 때, 각 동물은 "멍멍", "야옹", "짹짹"처럼 자신만의 고유한 소리를 낼 수 있다. 이렇게 하나의 메소드가 여러 형태로 구현되는 것이다.
ex) '은행 계좌' 객체를 설계할 때, 계좌의 '잔액 조회', '입금', '출금' 같은 핵심 기능만을 포함시키고, 계좌의 내부 구조나 처리 방법은 숨긴다.
객체지향 프로그래밍은 데이터와 기능을 객체로 묶어 관리하는 반면, 절차 지향 프로그래밍은 프로그램을 함수의 집합으로 보고 순차적으로 실행하는 접근 방식