객체 지향 프로그래밍
Object Oriented Programming
많은 객체들이 모여서 상호 협력하면서 데이터를 처리하는 방식.
프로그램을 묶음 단위로 쪼개서 재사용성을 높이기 위한 방식이다. 절차적 프로그래밍의 단점을 극복할 수 있다.
cf.) 객체지향 - 객체를 부품으로 만든다. / 절차적 - 함수를 부품으로 만든다.
real world의 객체를 abstraction을 통해서 class를 생성하고, 명사적 특징을 variable, 동사적 특징을 method으로 표현한다.
클래스 : 인스턴스(객체)를 생성하기 위한 하나의 템플릿.
클래스를 통해서 인스턴스를 생성한다. 즉, 클래스는 인스턴스가 아니다.
클래스에 정의된 변수와 함수는 클래스의 소유가 아닌 인스턴스의 소유이다.
OOP의 4가지 특징 - 추상화, 상속, 다형성, 캡슐화
추상화
Abstraction
클래스를 정의할 때 불필요한 부분들을 생략하고 객체의 속성 중 중요한 것에만 중점을 두어 개략화하는 것.
클래스들의 중요하고 공통된 성질들을 추출하여 부모(슈퍼) 클래스를 선정한다.
- 제어 추상화 : 어떤 클래스의 메서드를 사용하는 사용자에게 해당 메서드의 작동방식과 같은 내부 로직을 숨기는 것
- 데이터 추상화 : 대상을 간단한 개념으로 일반화하는 과정
추상화를 진행할수록 객체의 디테일함은 사라지고 공통된 특징만 남게 된다.
e.g.) 아이폰 객체를 추상화하면? 아이폰 → 휴대폰 → 통신기기 → 전자제품
추상화한 상위 요소부터 각 요소에 맞는 기능들을 정의한다.
e.g.) 전자제품 - 전원 기능 / 통신기기 - 통화 기능 / 휴대폰 - 카메라, 게임 기능 / 아이폰 - 애플 앱
마지막으로 상위 요소가 가진 내용들을 하위 요소가 가질 수 있도록 상속 관계를 설정하여 이어준다.
상속에서는 extends 키워드를 통해 기능을 확장시켜 준다.
상속
Inheritance
객체들 간의 관계를 구축하는 방법.
상위 클래스의 속성(변수)과 기능(메서드)을 재사용하여 하위 클래스가 전부 물려받는 것.
상속되는 클래스는 super/parent 클래스. 새롭게 생성되는 클래스는 sub/child 클래스.
상속을 활용하면 코드의 중복을 제거할 수 있고 코드의 재사용성을 증대시킬 수 있다.
자주 사용될 것으로 예상되는 기능을 모아놓은 클래스를 만들고, 재사용함으로써 유지보수 효율화를 추구할 수 있다.
class - class 상속은 extends / class - interface 상속은 implements
다형성
Polymorphism
같은 자료형에 여러 가지 타입의 데이터를 대입하여 다양한 결과를 얻어낼 수 있는 성질.
조상 클래스의 참조 변수로 자손 클래스의 참조 변수를 다루거나, 동일한 이름을 갖는 여러 형태의 메서드를 만들 수 있다.
e.g.) 오버로딩, 오버라이딩, 인터페이스, 추상메서드 등등
인터페이스는 상수와 추상메서드로 구성되어 있는 설계다.
cf.) 추상메서드 : 구현부를 갖지 않는 메서드
인터페이스에 정의된 추상메서드는 상속 관계에서 하위클래스에 메서드 구현의 강제성을 부여한다. 이것을 overriding이라고 한다.
캡슐화
Encapsulation
객체의 필드 및 메소드 은닉.
cf.) 객체의 구체적인 타입 은닉 → 업캐스팅 / 구현 은닉 → 인터페이스 & 추상 클래스
위 세가지 기법은 대표적인 자바 프로그래밍의 정보 은닉 기법이다.
e.g.)
public class UserTime {
private int hour;
// Setter
public void setHour(int hour) {
if (hour < 0 || hour > 24) {
System.out.println("시간 확인 요망!!");
} else {
this.hour = hour;
}
}
// Getter
public int getHour() {
return hour;
}
}
public class UserTimeClient {
public static void main(String[] args) {
UserTime instance = new UserTime();
// 캡슐화 구현으로 에러 발생
// instance.hour = -1000;
// System.out.println(instance.hour);
instance.setHour(13);
int returnValue = instance.getHour();
System.out.println(returnValue);
}
}
자바 기본 문법
/*
접근지정자 : public, protected, private, package
접근지정자 class class_name {
변수
접근지정자 변수타입 변수명;
메서드
접근지정자 반환타입 메서드명([파라미터...]) {
logic;
}
}
*/
'한화시스템 BEYOND SW캠프 > TIL' 카테고리의 다른 글
[3주차] 24.01.24 수요일 (0) | 2024.01.24 |
---|---|
[3주차] 24.01.23 화요일 (0) | 2024.01.23 |
[2주차] 24.01.18 목요일 (0) | 2024.01.18 |
[2주차] 24.01.17 수요일 (0) | 2024.01.17 |
[2주차] 24.01.16 화요일 (0) | 2024.01.16 |