객체지향 프로그래밍(Object-Oriented Programming)
- 실제 세계를 모델링하여 소프트웨어를 개발
- 현실 세계의 개체(Entity)를 속성(Attribute)과 메소드(Method)가 결합된 형태의 객체(Object)로 표현
- 객체들 간의 상호작용을 통해 로직 구성
객체 지향 언어 종류
- Java, Python, C++, C# 등
객체 지향 프로그램의 특징
- 상태(데이터) 중심
- 개발의 효율성 및 편리성 높이는데 목적
- 프로그램 모듈 재사용 가능
객체(Object)
- 상태를 나타내는 필드(변수)와 행동을 구현하는 메소드로 구성된 모듈
- 개발 시간(design-time)에는 레퍼런스 변수로 정의
- 실행 시간(run-time)에는 클래스의 인스턴스를 의미
- 실제 세계에 존재하는 하나의 단위에 대한 소프트웨어적 표현
클래스(Class)
- 객체지향 프로그래밍에서 특정 객체를 생성하기 위해
속성(필드)과 행위(메서드)를 정의하는 일종의 틀(template)
추상화(Abstraction)
- 객체에서 공통된 속성과 행위를 추출하는 것(모델링)
- 현실 세계에서의 사물을 데이터, 기능적인 측면을 통해 정의하는 것(데이터 추상화)
캡슐화(Encapsulation)
- 객체의 실제 구현 내용을 외부에 감추어 은닉
- 외부에서는 오퍼레이션을 통해서만 데이터 접근 가능(Getter/Setter)
- 인터페이스 부분만 공개하고 구현부는 감추는 것
- 객체의 기능과 사용법만 제공하고 내부는 비공개
캡슐화의 장점
- 데이터 보호 : 데이터에 직접 접근 차단. 객체 내 데이터, 코드 손상 및 오용 방지
- 추상화 용이, 사용법이 쉬움, 변경 용이성과 재사용성 증가, 객체 제공자와 이용자를 명확히 분리
- 이용자에게 편리성 제공 : 메소드 구현 방법이 변경되어도 사용 방법은 동일
- 객체 간의 독립성 보장 : 캡슐화(데이터 + 메서드)로 인해 객체 간의 독립성이 구조적으로 보장
다형성(Polymorphism)
- 하나의 객체에 여러가지 타입을 대입할 수 있다는 것
Overloading(메서드 중복 정의)
- 동일한 이름의 Operation 사용(수평적)
- 메서드 괄호 속에 인자 개수 또는 자료형이 다른 경우, 동일한 메서드 이름 가능
Overriding(메서드 재정의)
- 슈퍼 클래스의 메서드를 서브 클래스에서 재정의(수직적)
- 상위 클래스를 상속 받은 하위 클래스에서 상위 클래스에 정의된 메서드를 재정의(반드시 상속 관계이어야 함)
- 메서드의 접근 제어자는 크거나 같아야하며 리턴 타입, 메서드 이름, 매개 변수의 수나 타입이 완전 일치
- final, static, private 메서드는 재정의 불가
추상 클래스(abstract)
- 하나 이상의 추상 메서드를 갖는 클래스
- 하위 클래스에서 오버라이딩 할 것을 예상하여 미리 계획해 놓은 것
- new로 객체 생성 불가능
- 상속받은 클래스는 추상 메서드를 구현해야만 인스턴스 생성 가능
인터페이스(interface)
- 모든 메서드가 추상 메서드로 선언만 되어 있는 클래스
- 템플릿의 기능을 수행하는 추상 클래스
- new로 객체 생성 불가능
- 모든 필드(변수)는 static 이고 final
- 다중 상속 가능
- JDK 8.0 부터 default 메서드 사용 가능(인터페이스에서 구현 가능, 재정의 가능)
기존 인터페이스를 확장해 새로운 기능을 추가할 목적
- JDK 8.0 부터 static 메서드 사용 가능. 객체 생성 없이 인터페이스명으로 호출 가능
- 구현 클래스는 implements 키워드를 이용해 인터페이스 구현
인터페이스의 장점
- 개발 시간 단축
- 표준화 가능
- 독립적인 프로그래밍 가능
- 서로 관계없는 클래스들에게 관계 맺어 줄 수 있다.
InnerClass
- 클래스 내에 선언된 클래스
- 특정 클래스 안에서만 주로 사용되는 클래스를 내부 클래스로 선언
- 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근 가능
- 코드의 복잡성 감소
- 보안에 유리
'Tech Interview > Java' 카테고리의 다른 글
스레드와 동기화 (0) | 2023.02.06 |
---|---|
제네릭과 컬렉션 (0) | 2023.02.05 |
예외 처리 (0) | 2023.02.04 |
자바 주요 클래스 (0) | 2023.02.03 |
자바 기초 (0) | 2023.02.01 |