반응형
OOPS란?
OOPs는 Object-Oriented Programming System(객체 지향 프로그래밍 시스템)의 약자로, 객체 지향 프로그래밍은 데이터와 그 데이터를 조작하는 방법을 하나의 단위로 묶어 객체라는 개념을 사용하여 소프트웨어를 설계하고 구현하는 방식입니다.
클래스와 객체 (Class and Object)
- 클래스(Class): 클래스는 객체를 만들기 위한 설계도 혹은 틀입니다. 클래스는 데이터(속성, 필드)와 메소드(함수)로 구성되며, 객체의 초기 상태를 정의합니다.
// 예시: Person 클래스
public class Person {
// 필드(속성)
private String name;
private int age;
// 생성자
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 메소드
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
객체(Object): 클래스의 인스턴스(instance)를 의미합니다. 클래스를 기반으로 생성된 실체화된 개체로, 데이터와 해당 데이터를 처리하기 위한 메소드를 가집니다.
// Person 클래스의 객체 생성
Person person1 = new Person("Alice", 30);
Person person2 = new Person("Bob", 25);
캡슐화 (Encapsulation)
- 캡슐화는 데이터와 그 데이터를 처리하는 메소드를 하나로 묶어 클래스 내부로 숨기는 것을 말합니다. 이는 데이터의 접근을 제어하고, 외부에서 직접적으로 접근하지 못하게 하여 객체의 상태를 보호합니다.
// Person 클래스의 캡슐화 예제
public class Person {
private String name;
private int age;
// 생성자, getter, setter는 캡슐화를 지키면서 필요한 접근을 제공합니다.
}
상속 (Inheritance)
- 상속은 기존 클래스(부모 클래스 또는 슈퍼 클래스)를 확장하여 새로운 클래스(자식 클래스 또는 서브 클래스)를 만드는 개념입니다. 자식 클래스는 부모 클래스의 속성과 메소드를 상속받아 재사용할 수 있습니다.
// Animal 클래스를 상속받는 Dog 클래스 예제
public class Dog extends Animal {
// Animal 클래스의 속성과 메소드를 상속받음
}
다형성 (Polymorphism)
- 다형성은 같은 이름의 메소드가 다른 동작을 할 수 있도록 하는 기능입니다. 다형성은 오버로딩(Overloading)과 오버라이딩(Overriding) 두 가지 형태로 구현됩니다.
- 오버로딩(Overloading): 같은 이름의 메소드를 매개변수의 타입 또는 개수에 따라 다르게 정의하는 것입니다.
// 오버로딩 예제
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
}
- 오버라이딩(Overriding): 상위 클래스의 메소드를 하위 클래스에서 재정의하는 것으로, 상속 관계에서 사용됩니다.
// 오버라이딩 예제
public class Animal {
public void makeSound() {
System.out.println("Some sound");
}
}
public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Bark");
}
}
추상화 (Abstraction)
- 추상화는 복잡한 실세계를 단순화하여 모델링하는 개념입니다. 추상 클래스나 인터페이스를 사용하여 필수적인 특성만을 추출하여 정의합니다.
// 추상 클래스 예제
public abstract class Shape {
abstract double area();
abstract double perimeter();
}
public class Circle extends Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
@Override
public double area() {
return Math.PI * radius * radius;
}
@Override
public double perimeter() {
return 2 * Math.PI * radius;
}
}
이러한 객체지향 프로그래밍의 주요 개념들은 코드를 구조화하고 유지보수성을 높이며, 객체들 간의 관계를 명확히 정의하여 프로그램을 개발하는 데 유리합니다.
반응형
'Programming > Java, Kotlin' 카테고리의 다른 글
[Java] 컬렉션 프레임워크(Collection Framework), 동시성 컬렉션(concurrent collection) 이란? 장단점, 차이 (0) | 2024.06.22 |
---|---|
[Java] Serialization란? 사용 방법, 사용 이유, 예시, 장점 (0) | 2024.06.22 |
[Java] Immutability(불변성)이란? Immutability 특징, 사용 예시, 장점 (0) | 2024.06.22 |
[Java] hashCode, equals 메소드 정의, 차이 (0) | 2024.06.22 |
[Java] AOP 란? AOP 장점, 사용 예시 (0) | 2024.06.22 |