[Java] OOP
1. Introduction to OOP
OOP의 정의
- Object-Oriented Programming : 객체지향적 프로그래밍
- Object : 객체, 데이터와 메소드를 캡슐화한 class의 인스턴스 단위
- Class : 클래스, Object의 청사진
- Data : 변수, field
- Code : 메소드, method
OOP의 장점
- Modularity 모듈성 : 하나의 큰 덩어리를 만들기 위해 작은 모듈로 나누는 것
- Reusability 재사용성 : 코드를 재사용 하기 좋음
- Extensibility 확장성 : 존재하는 코드의 기능을 늘리기 좋음 (상속)
- core 한 기능을 구현 해놓고 파츠를 붙임
- Maintainability 유지성 : 부분들이 나눠져 있어 유지 보수에 좋음
- 변화가 필요한 부분에만 코드 수정
2. Classes and Objects
Class - 클래스
- Class : object를 만드는 청사진. 변수와 메소드를 정의함.
public class Car{
String color;
int speed;
//field
void accelerate(){
speed += 10;
}
// method
}
Object - 객체
- Object : class의 인스턴스. new 키워드를 사용해서 만들어짐.
Car myCar = new Car();
// Car 클래스의 myCar라는 새로운 객체 생성
myCar.color = "red";
myCar.accelerate();
// 클래스 정의 시의 변수와 메소드 사용 가능
3. Constructors and Methods
Constructor - 생성자
- Constructor : 객체가 생성될 때 초기화 할 수 있는 특별한 메소드
- 생성자의 이름은 class 명과 동일.
- this 키워드 사용 가능(오직 생성자에서만 사용 가능)
- Overloading 가눙
public class Car{
String color;
int speed;
//Constructor
public Car(String color, int speed){
this.color = color;
this.speed = speed;
}
}
Methods - 메소드
- Method : class 안에 존재하는 함수들
public class Car{
String color;
int speed;
// Method
void accelerate(){
speed += 10;
}
}
3. Inheritance and Polymorphism
Inheritance - 상속
- 상속 : 다른 class의 메소드와 변수를 상속 받는 것
extends키워드 사용- superclass : 상위 클래스
- subclass : 하위 클래스
- 장점 : Reusability(재사용성), Hierarchy(상하관계), Overriding(오버라이딩)
- 생성자에서
super키워드 사용 가능
public class Animal{
private String name;
// Constructor
public Animal(String name){
this.name = name;
}
// Method
public void makeSound(){
System.out.println("Some animal Sound");
}
→ 상위 클래스
public class Dog extends Animal{
// Constructor
public Dog(String name){
super(name);
}
@Override
public void makeSound(){
System.out.println("Bark");
}
→ 하위 클래스
- 상속에는 다양한 형태가 있다.

Polymorphism - 다형성
- Method Overriding : 상위 클래스의 메소드를 하위 클래스에서 재사용 하는 것
- Method Overloading : 같은 이름, 다른 인자를 가지는 메소드를 만드는 것.
반드시 다른 인자를 가져야 함.
public class MathOperations{
// 두 정수 더하기
public int add(int a, int b)
return a + b;
// 세 정수 더하기로 overloading
public int add(int a, int b, int c)
return a + b + c;
// 두 실수 더하기로 overloading
public double add(double a, double b)
return a + b;
}
- Dynamic Method Dispatch : 동적 메소드 디스패치. 하위 클래스는 상위 클래스를 대체할 수 있다.
public static void main(String[] args){
Animal myDog = new Dog("Buddy");
Animal myCat = new Cat("Whiskers");
}
- Animal 배열에 myDog, myCat이 들어갈 수 있다(Animal class를 상속하고 있기 때문에)
4. Encapsulation and Abstraction
Encapsulation - 캡슐화
- 접근 권한을 제한하기 위해 사용
- 접근 제한자를 활용한 데이터 숨김 → 함부로 열 수 없다
- Getter & Setter
Access Modifier - 접근 제한자
- default : 기본값. 같은 package 내에서 사용 가능
- public : 어디에서나, 누구나 사용 가능
- private : class 내부에서만 사용 가능
- protected : 같은 package + package 밖의 상속된 하위 클래스에서 사용 가능
- 보안 수준 : private < default < protected < public
- package 패키지 : 다른 패키지의 class를 이용하기 위해선 import 사용해야 한다.
Abstraction - 추상화
- 디테일이 없는, 모양만 잡아둔 것. class, method 에 사용할 수 있다
abstract class Shape{ // 추상 클래스
abstract double area(); // 추상 메소드
}
- 추상 메소드는 내부에 코드를 작성하지 않는다.
5. Interfaces and Abstract Classes
Abstract Class - 추상 클래스
- class이지만 인스턴스를 생성할 수 없다.
상속의 역할. - 추상 메소드 + 일반 메소드 both 생성 가능
- 변수 포함 가능
abstract class Shape{
double length; // 변수
abstract double area(); // 추상 메소드
void display(){ // 일반 메소드
System.out.println("Displaying Shape");
}
}
- 상속 후
overriding을 통해 메소드의 세부 내용을 채워야 함. A는 B다의 관계- 고양이는 동물이다
- 직사각형은 도형이다
Interface 인터페이스
- 추상 메소드만 포함 가능.
- 클래스와 상관없이 사용 가능.
implements키워드 사용. 한 번에 다양한 인터페이스 implement 가능
interface Sound {
void makeSound();
}
class Dog implements Sound{
@Override
public void makeSound(){
System.out.println("Bark");
}
}
기능에 관한 내용- 동물은 귀여운 소리를 낸다
- 로봇은 귀여운 소리를 낸다
공유하기
Twitter Facebook LinkedIn글 이동
Comments