Language/JAVA

(JAVA)객체 지향 프로그래밍(OOP)

doheun 2023. 1. 18. 11:20
반응형

OOP(Object Oriented Programming)

객체 지향 프로그래밍
좋은 설계 : 낮은 결합도
-> 연관성이있도록 설계하게 될 경우 하나를 바꾸면 연쇄적으로 다 바꿔야 하는 경우가 생길 수 있다.


3대 개념

1. 은닉화(Encapsulation)

데이터의 보호 목적

  • 접근제한자(private)로 속성들을 만들어 클래스 밖에서 접근하여 변경하지 못하게 함
  • 메서드를 통해서만 멤버필드에 접근가능

은닉화 예시(싱글톤 패턴)

public class Singleton {

    private static Singleton singleton; //멤버필드 private로 접근제한

    private Singleton() {

    }
    //객체가 생성 되었는지 확인해서 new를 제한하는 메서드
    //getSingleton 메서드를 static 메모리를 통해 singlenton 멤버필드에 접근
    public static Singleton getSingleton() {
        if(singleton==null) {
            singleton=new Singleton();
        }

        return singleton;
    }
}

2. 상속성(Inheritance)

하위클래스(자식)가 상위클래스(부모)에서 정의한 속성과 메소드를 그대로 사용가능

  • 하위클래스 뒤에 extends 상위클래스명을 붙이면 사용가능
  • 부모의 초기화시 super , 자신의 초기화시 this
//상위클래스(부모)
public class SuperClass {

    public void superMethod() {
        System.out.println("부모클래스");
    }
}
//하위클래스(자식)
public class thisClass extends SuperClass {

    public void thisMethod() {
        System.out.println("자식클래스");
    }

}

//실행
public class classMain {

    public static void main(String[] args) {

        thisClass tc=new thisClass();
        tc.superMethod();
    }

}
//부모클래스

오버라이딩 안되는 경우

1) static (이미 메모리에 올렸기때문에 변경불가)
2) 부모의 생성자 상속 불가
3) 부모에서 private 사용된 메서드
4) 부모에서 final 사용된 메서드


3. 다형성(Polymorphism)

하나의 객체가 여러가지 타입을 가지는 것
-> 자식의 형태에 따라 다양하게 호출

전제조건

상속과 오버라이딩

목적

참조타입의 경우 기본타입처럼 대소관계를 나타낼 수 없기 때문에 계층(상위-하위)개념을 통해 포함관계를 따질 수 있게 된다. 상속을 통해서 계층구조를 만들게 되면 객체가 다형성을 형성하게 되면서 캐스팅도 가능해 진다.

객체지향으로 프로그램시 각각의 객체의 종류가 여려종류인데 어떤 참조타입으로 사용할지 모르기 때문에 상속을 통해서 하나의 타입을 만들어놓고 다양한 객체를 받아서 사용하기 위해서 다형성이라는 개념을 알아야 한다.

만약 Class1, Class2,Class3 이라는 3개의 클래스가 있다고 가정할 때, Object클래스는 최상위클래스 이기 때문에 Object의 타입으로 3개의 클래스를 모두 생성할 수 있다.

발생원리 3가지

  1. 부모의 타입으로 자식을 생성

SuperClass sc=new ThisClass();
  1. 부모의 이름으로 자식을 받을 수 있다.

ThisClass tc=new ThisClass(); 
SuperClass sc2=tc; 
ThisClass tc2=(ThisClass)sc2;
  • tc2는 하위클래스의 타입이고 sc2는 상위클래스 타입이기 때문에 sc2를 ThisClass에서 사용하기 위해서는 같은 타입으로 캐스팅 해야한다
  1. 부모의 메서드를 자식의 메서드로 호출한다.

//부모클래스
public void superMethod() {
        System.out.println("부모클래스");
}

//실행
public static void main(String[] args) {
        //자식객체 생성
        ThisClass tc=new ThisClass();

        tc.superMethod();

}

메모리 구조(상속)

heap영역

  • 자식이 생성되려면 부모가 생성 되어야 한다
  • 생성된 주소는 부모의 주소를 가리킨다

methodArea영역

  • 자식의 설계도가 올라가면 부모도 같이 올라간다
  • 설계도에 공개된 메소드만이 사용 가능하다

OOP의 다른 특징

반응형

'Language > JAVA' 카테고리의 다른 글

(JAVA)추상 클래스  (0) 2023.01.19
(JAVA)상속-super, this  (0) 2023.01.19
(JAVA)로또  (0) 2023.01.17
(JAVA)배열  (0) 2023.01.16
(JAVA)String 메서드(문자열 자르기)  (0) 2023.01.13