Java 프로그래밍기초 230220 #4 OOP

김춘복·2023년 2월 20일
0

Java 공부

목록 보기
7/20

OOP

  • 참고 영상
    객체지향에 대해 완벽히 정리가 되지 않은 것 같아 따로 영상을 보고 정리해보려한다.

  • OOP : Object-Oriented Programming. 객체지향프로그래밍. 객체들이 모여서 상호협력하면서 데이터를 처리하는 방식의 프로그래밍 설계방법.

OOP 기본 요소

  • Class(클래스) : 객체를 위한 팩토리. 동일한 속성을 갖고 있지만 데이터는 다른 경우.
    클래스는 일종의 구조, 설계도, 템플릿, 금형, 붕어빵틀.

  • Instance(인스턴스) : 클래스로 만들어낸 객체.

  • Method(메서드) : 클래스 내에 있는 함수. 인수를 받아 클래스를 어떻게 구성할지 정한다.

상속

  • 상속(Inheritance) : 자식(child)클래스가 부모(parent)클래스의 속성을 갖게 된다.
    상위 개념의 특징을 하위 개념이 전부 물려받는 것.
    부모클래스에서 공통의 속성을 정의하고 자식클래스에서 각각 자신만의 속성을 정의하면 코드 중복이 줄어든다.

  • 상속을 통해 코드 중복을 줄이고 코드를 재사용 가능한 조각으로 나눌 수 있다.

  • 상속은 분할과 정복을 가능하게한다. 클래스들을 작게 분할한 후에 레고처럼 클래스들을 구성할 수 있다.

캡슐화

  • 캡슐화(Encapsulation): 데이터, 데이터를 활용하는 함수를 클래스라는 캡슐 안에 묶는 것. 코드가 더 구조화된다. 즉, 변수와 함수를 클래스에 하나로 묶는 것. 그래서 원하면 데이터와 코드를 캡슐 외부에서 알 수 없게 할 수 있다.

  • 클래스 안에 있는 데이터를 이용하는 메서드일경우 캡슐 에 넣으면 데이터에 직접 엑세스 시켜 인수를 취할 필요가 없다.

  • 캡슐화를 통해 표시할 속성과 숨길 속성을 선택할 수 있다. 내부적으로만 사용되는 것을 외부로 노출시키지 않고 감추기 위해 사용. 접근제어자로 클래스 정보에 접근 or 수정할 권한을 결정한다.

추상화

  • 참고 사이트

  • 추상화(Absrtaction) : 구현 세부 정보를 숨기는 일반 인터페이스를 지정하는 행위. 속성이나 기능을 묶어 이름을 붙이는 것. 객체의 여러 특성중 필요한(공통적인)부분만 추출해서 개략화.
    클래스를 정의할 때 불필요한 부분들을 생략하고 객체의 속성 중 중요한 것에만 중점을 두고 개략화하는 것.

  • 제어 추상화 : 어떤 클래스의 메소드를 사용하는 사용자에게 해당 메소드의 작동방식과 같은 내부 로직을 숨기는 것. 프로그래밍의 복잡성을 줄여주고 가독성과 생산성을 높여준다.

  • 데이터 추상화 : 대상을 간단한 개념으로 일반화하는 과정. 공통의 특징으로 묶어서 이름을 붙여 디테일을 없에고 공통의 특징만 남긴다. 하위개념에서 공통 특징을 모아 상위개념을 만드는 것.

다형성

  • Polymorphism : Poly-여러 / morphism-형태, 모양. 상속과 연관된 개념으로 하나의 객체가 다른 여러 객체로 재구성되는 것. 한 부모클래스에서 나왔다고 같은 자손객체가 아니다. 오버라이딩 오버로딩이 다형성을 드러내는 대표적인 예.

  • 오버라이딩(Overriding) : 자식클래스가 부모클래스의 모든 특성을 상속받지만 특정 메서드는 다르게 구현할 수 있다.

  • 부모클래스에서 메서드를 오버라이딩할 수 있지만, 마음대로 다 바꾸는 것이 아니라 메서드가 어떻게 작동해야하는지 규칙이 정해져 있다.(java의 경우 부모 클래스의 메소드와 이름, 매개변수, 반환타입이 같아야 한다.)

  • 그 결과, 클래스의 핵심은 그대로 있고 구현방식의 모양과 모습만 달라지는데 이를 다형성이라 한다.

  • 조상타입의 참조변수로 자손타입의 객체를 다룰 수 있는데, 이 경우 조상타입엔 없고 자손타입에만 있는 기능 및 속성은 사용할 수 없다.

class People {
	public void walking() {
    System.out.println("사람은 걷는다.")
    }
}

class Army {
	@Override
	public void walking() {
    System.out.println("군인은 걷지않고 뛴다.")
    }
    
    public void shooting() {
    System.out.println("군인은 총을 쏜다.")
    }
}

class Test {
	public static void main(String[] args){
    // 조상타입인 People의 참조변수로 자손타입인 Army의 객체를 다룰 수 있다. 
    People ChoonB = new Army();
    
    ChoonB.walking();	// "군인은 걷지않고 뛴다." 오버라이딩된 자손타입의 메소드 출력
//  ChoonB.shooting(); // 에러발생으로 실행 불가.
// 조상타입엔 없고 자손타입에만 있는 메서드라 위의 선언으로는 불가능.
    
profile
Backend Dev / Data Engineer

0개의 댓글