일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- airflow
- docker
- CVAT
- kubernetes
- kubectl
- Vision
- Packet
- CSV
- EC2
- aws s3
- tcp
- java
- Kafka
- Network
- PostgreSQL
- ip
- log
- Operating System
- JavaScript
- helm
- grafana
- jvm
- kubeadm
- Python
- MAC address
- zookeeper
- Trino
- AWS
- OS
- Spring
- Today
- Total
JUST WRITE
OOP 본문
JAVA 관점에서 OOP에 대해서 살펴보겠습니다.
OOP
Object-oriented Programing
실제 세계는 사물(객체)로 이루어져 있으며, 발생하는 모든 사건들은 상호작용이다.
컴퓨터 프로그래밍 패러다임 중 하나이다.
객체의 관점에서 프로그래밍을 하는 것이다.
객체들의 유기적인 관계를 통해서 프로세스가 진행된다.
Application을 구성하는 요소들을 객체로 바라보고, 유기적으로 연결하여 프로그래밍 하는 것이다.
구성요소
Class
클래스는 사용자 정의 데이터형(user defined data type)이며 객체의 설계도이다.
Object
객체는 클래스의 인스턴스이다.
프로그래밍에서의 객체는 클래스에 정의된 내용대로 메모리에 생성된다.
Method
메소드는 클래스에 정의 되어 객체의 동작을 의미한다.
객체의 속성을 조작하기도 한다.
Attribute
속성은 클래스에 정의된 객체의 속성이다.
// classes
class Tv {
// Attributes
String color;
boolean power;
int channel;
// methods
void power() { power = !power; }
void channelUp() { ++channel; }
void channelDown() { --channel; }
}
...
public static void main (String[] args) {
// 클래스의 인스턴스화
Tv smartTv = new Tv();
}
특징
inheritance
상속은 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다.
하위(child) 클래스가 상위(parent) 클래스의 특징(Method, Attribute)을 가지게 된다.
고유한 계층 관계에 따라 공통적인 부분을 재사용할 수 있다.
// classes
class Tv {
// Attributes
String color;
boolean power;
int channel;
// methods
void power() { power = !power; }
void channelUp() { ++channel; }
void channelDown() { --channel; }
}
class CaptionTv extends Tv {
boolean caption;
void displayCaption(String text) {
if (caption) System.out.println(text);
}
}
...
public static void main (String[] args) {
CaptionTv ctv = new CatptionTv();
ctv.channel = 10; // Tv를 상속받았기 때문에 해당 속성 가짐
ctv.channelUp();
}
Polymorphism
다형성은 한 요소가 다양한 형태를 보여줄 수 있다는 개념입니다.
아래 두 가지 형태가 다형성을 보여주는 대표적인 예이다.
overriding(오버라이딩)
상위 클래스로부터 상속받은 Method의 내용을 변경하는 것
class Point {
int x;
int y;
String getLocation() {
return "x: " + x + ", y: " + y;
}
}
class Point3D extends Point {
int z;
// overriding
String getLocation() {
return "x: " + x + ", y: " + y + ", z: " + z;
}
}
overloading(오버로딩)
동일한 이름의 Method를 매개변수에 따라 다르게 동작하도록 할 수 있다.
public void printNum(int a) {
System.out.println(a);
}
public void printNum(int a, int b) {
int c = a + b;
System.out.println(c);
}
public void printNum(int a, int b, int c) {
int d = a + b - c;
System.out.println(d);
}
Encapsulation
캡슐화는 외부에서 클래스로 쉽게 접근하지 못하도록 캡슐형태로 만드는 것이다.
객체의 구현 및 상태는 정의된 클래스 내에서 비공개로 유지 된다.
외부에서는 public 메서드나 인터페이스를 통한 동작만 접근, 변경 가능하다.
접근 제어자(access modifier)를 통해 캡슐화를 할 수 있다.
프로그램 보안을 강화하고 의도치 않은 데이터 손상을 방지한다.
abstraction
추상화는 객체의 공통적인 속성과 기능을 추출하여 정의하는 것이다.
공통적인 특성을 파악해서 필요없는 특징을 제거하는 것이다.
[참고사이트]
'Programing > Java' 카테고리의 다른 글
Immutable Objects (0) | 2021.09.25 |
---|---|
Wrapper Class (0) | 2021.09.24 |
Static (0) | 2021.09.24 |
접근 제어자 (0) | 2021.08.26 |
Java 특징 (0) | 2021.08.22 |