cgy12306

[JAVA] 객체 지향의 4대 특성 본문

Programming/JAVA

[JAVA] 객체 지향의 4대 특성

cgy12306 2022. 1. 3. 02:47

객체 지향의 4대 특성

  • 캡슐화(Encapsulation) : 정보 은닉
  • 상속(Inheritance): 재사용
  • 추상화(Abstraction) : 구체적인 것을 분해해서 관심 영역(애플리케이션 경계)에 있는 특성만을 가지고 재조합 하는 것 = 모델링
  • 다형성(Polymorphism) : 사용 편의

객체 : 유일무이한 사물

클래스 : 같은 특성을 지닌 여러 객체를 총칭하는 집합.

 

객체지향의 핵심 : IoC(Inversion of Control)을 통해 상위 레벨의 모듈을 하위 레벨의 모듈로부터 보호하는 것.

 

인스턴스 : 클래스의 정의를 통해 만들어진 객체. 객체가 메모리에 할당되어 실제 사용될 때를 인스턴스라고 함.

class test{
	Mouse micky; // Mouse 타입의 객체
	micky = new Mounse() // 메모리에 할당된 인스턴스
}

객체지향 상속

  • 상위 클래스의 특성을 재사용하는 것
  • 상위 클래스의 특성을 확장하는 것
  • 상속은 is a 보다는 is a kind of 관계를 만족해야 한다.
  • LSP(리스코프의 치환 원칙)

오버라이드(Override)

상위 클래스에 있는 메소드를 하위 클래스에서 재정의 하는 것

오버로드(Overload)

한 클래스 내에 중복된 이름의 메소드들을 매개변수를 다르게 하여 메소드를 재정의. 자바의 다형성을 통해 같은 이름의 메소드로 다른 매개들을 넘겨줘서 사용자의 편리성이 증가

다형성 비존재 => add(int a, int b), addDouble(double a, double b)
다형성 존재 => add(int a, int b), add(double a, double b)

super 키워드

하위 클래스에서 상위 클래스를 오버라이드를 하면 상위 클래스의 메소드를 사용할 수 없게 되는데 super 키워드를 사용하면 하위 클래스에서 상위 클래스의 메소드를 사용할 수 있게 됨

캡슐화

  • 상속을 받지 않았다면 객체 멤버는 객체를 생성한 후 객체 참조 변수를 이용해 접근해야 함
  • 정적 멤버는 클래스명.정적멤버 형식으로 접근하는 것을 권장

생성자

클래스의 인스턴스를 만들때마다 new 키워드를 사용함

이때 클래스 명에 붙은 소괄호 또한 메소드임. 이것을 객체 생성자 메소드 또는 생성자라고 함

  • 개발자가 아무런 생성자를 만들지 않으면 자바는 인자가 없는 기본 생성자를 자동으로 만들어 줌
  • 인자가 있는 생성자를 하나라도 만들면 자바는 기본 생성자를 만들어 주지 않음.

final 키워드

클래스에 final이 붙으면 상속을 허락하지 않겠다는 의미

public final class 동물{ }

public class 조류 extends 동물 { } => 불가능

변수에 final이 붙어 있으면 병경 불가능한 상수가 됨. 정적 변수는 선언 시에 혹은 정적 생성자에 해당하는 static 블록 내부에서 초기화 가능.

메소드에 final이 붙어있으면 오버라이딩을 금지한다는 의미

추상 메소드

추상 메소드는 자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드

abstract 반환타입 메소드이름();

추상 클래스

하나 이상의 추상 메소드를 포함하는 클래스

abstract class 클래스 이름{
	abstract 반환타입 메소드이름();
}

추상 메소드가 포함된 클래스를 상속받는 자식 클래스가 반드시 추상 메소드를 구현하도록 하기 위해 추상 메소드를 사용함

this 키워드

객체가 자기 자신을 지칭할 때 쓰는 키워드

  • 지역 변수와 속성의 이름이 같은 경우 지역 변수 우선
  • 객체 변수와 이름이 같은 지역 변수가 있는 경우 객체 변수를 사용하려면 this를 접두사로 사용
  • 정적 변수와 이름이 같은 지역 변수가 있는 경우 정적 변수를 사용하려면 클래스명을 접두사로 사용
    •  

참고 : http://www.tcpschool.com/java/java_polymorphism_abstract

스프링 입문을 위한 자바 객체 지향의 원리와 이해

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

[JAVA] 객체 지향의 설계 5원칙 - SOLID  (0) 2022.01.03
[JAVA] JAVA 작동 원리  (0) 2022.01.03
Comments