[Java] 02. OOP

Yeonbo_ra·2024년 10월 6일

Java

목록 보기
2/6
post-thumbnail

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");
    }
}
  • 기능에 관한 내용
    • 동물은 귀여운 소리를 낸다
    • 로봇은 귀여운 소리를 낸다
profile
컴공 대학생의 공부기록

0개의 댓글