객체지향

객체지향 프로그래밍(Object-Oriented Programming):
프로그램을 상태(state)와 행위(behave)로 이루어진 객체라는 기본단위로 나누고, 이 객체들이 각각 역할과 책임을 가지고 메세지로 상호작용을 해서 프로그램을 설계하고 개발하는 것인데 쉽게 말해 부품객체를 만들고 이것들을 하나씩 조립해서 완성된 프로그램을 만드는 기법이다

  • 여기서 <객체(Object)>란 구체적 추상적 데이터의 단위라고 하는데 주변에 존재하는 모든 사물(자동차, 건물, 옷 등), 생명체(사람, 고양이 등) 하나하나가 다 객체라고 할 수 있다.
  • 클래스(Class)는 객체를 코드로 구현한 것.

객체지향 프로그래밍의 4가지 핵심 개념

💊캡슐화(Encapsulation)💊

연관된 목적을 가지는 변수와 함수를 하나의 클래스로 묶어 외부에서 쉽게 접근하지 못하도록 은닉하는 것이 핵심이다.
캡슐화는 중요한 데이터를 쉽게 바꾸지 못하도록 할 때 사용한다.
캡슐화를 하는 가장 큰 이유는 정보 은닉에 있다.
캡슐화를 통해 외부에서 내부의 정보에 접근하거나 변경할 수 없게 직접적인 접근을 막고
객체가 제공하는 필드와 메소드를 통해서만 접근이 가능하다.
캡슐화는 접근제어자를 통해 이루어진다

자바의 접근 제어자

클래스 접근 제어자의미
default 동일 패키지의 클래스(class)에만 인스턴스(객체)를 생성가능하다.
public다른 패키지에서 인스턴스(객체)를 생성가능하다.

메소드 접근 제어자의미
public모든 객체에서 접근 가능하다
protected동일한 패키지 안에서 사용가능하고, 다른 패키지라도 상속받은 클래스에는 접근이 가능하다.
default아무런 접근 제한자를 명시하지 않으면 default 값이 되며, 동일한 패키지 내에서만 접근 가능
private동일한 클래스 안에서만 접근이 가능하고, this를 사용하는 것들은 외부에서 접근 불가능하고, 상속도 안된다.

캡슐화 예제 클래스(클래스 내의 변수에 접근하기 위해서 getter/setter라는 메소드 사용)

  • Tutor 클래스의 모든 변수는 private으로 접근제어자 선언을 해놓았기 때문에 Tutor 클래스 내부에서만 접근이 가능 하지만 setter , getter 라는 장치를 만들어 내부에서 접근이 가능하게 함.
   <Setter: Tutor 클래스내에 있는 변수에 값을 저장>
   
   public void setName(String name) {

        this.name = name;
    }
    public void setJob(String job) {

        this.job = job;
    }
    public void setBio(int bio) {

        this.bio = bio;
    }

}

 public : 어디서든 접근이 가능
 void : 리턴값이 없음
 set + 변수: 메소드이름
 String ,Int + 변수 : 입력된 매개변수
 this.변수 : Tutor 클래스 내에 있는 private String 변수

   <Getter: Tutor클래스내에 있는 변수에 저장되어 있는 값을 리턴>
    public String getName() {
        return this.name;
    }
    public String getJob() {
        return this.job;
    }
    public Integer getBio() {
        return this.bio;
    }
    
     public : 어디서든 접근이 가능
     String : 리턴값의 데이터타입
     getId : 메소드이름
     return : 리턴
     id : member 클래스 내에 있는 private에 저장되어 있는 값

    

메인 클래스

출력결과


🎨추상화(Abstraction)🎨

공통 성질을 추출하여 슈퍼클래스를 설정해 객체중심의 안정된 모델을 구축하는 것
하위 객체들의 공통적인 속성, 메소드를 추출하여 상위 객체로 만드는 것. 이는 객체 모델링 이라고도 함.

종류의미
1) 기능추상화클래스 내 메소드를 정의(obj.getName())
2) 데이터추상화객체 클래스 자체를 데이터 타입으로 사용(String, Class)
3) 제어추상화제어행위에 대한 개념화, 명령 및 이벤트(if, for, while)

저가형 자동차와 고급형 자동차는 자동차를 상속.

자동차←저가형 자동차
자동차←고급형 자동차
다시 말하면, 저가형 자동차와 고급형 자동차의 공통적인 속성과 메소드를 자동차 객체로 추상화 하였다고 할 수 있다
그리고 상속받은 속성과 메소드를 재정의하거나 새롭게 추가할 수 있다.

객체지향 언어에서는 클래스를 이용함으로써 데이터와 프로세스를 함께 추상화의 구조에 넣어 보다 완벽한 추상화 실현 할 수 있다>
<목적을 명확히!>
<불피요한 것들은 숨기기!>
<핵심만 드러내기!>


☝️상속(Inheritance)👇

하위 객체가 상위 자신의 속성과 메소드를 사용할 수 있도록 허용하는 것.
상위 객체의 속성과 메소드를 물려받는것을 의미
흔히 상속 관계는 상위 객체←하위 객체 와 같은 형식으로 나타난다.

상위 객체일수록 추상적이고, 하위 객체일수록 구체적으로 표현된다.

특징장점
재사용성요한 속성, 메소드를 가진 상위 객체를 상속하여 효율적으로 객체를 정의할 수 있음
확장성비슷한 특성을 가진 새로운 하위 객체를 효율적으로 정의할 수 있어 확장성이 좋음
유지보수성동일한 메소드를 각 객체마다 정의하고 있다면, 수많은 작업이 필요하다. 하지만, 상속을 이용한다면 상위 객체에서 수정하면 하위 객체에 적용되기 때문에 유지보수가 용이함

🧠다형성(Polymorphism)🧠


많은 형태 또는 많은 모양을 의미
우리의 클래스가 다른 방식으로 같은 일을 할 수 있다는 것을 의미한다
동일한 이름의 오퍼레이션(메소드)이 각 클래스마다
다른 사양으로 정의될 수 있다는 것을 말함.

자바에서 다형성은 대표적으로 두 가지 유형으로 나눔

1. 컴파일 타입 다형성(오버로딩(Overloading))

같은 이름의 함수(메서드)를 여러개 정의하고, 매개변수의 유형과 개수를 다르게 하여 다양한 유형의 호출에 응답할 수 있게하는 것


출력

각각 매개변수의 유형과 개수가 다르지만 호출 매개변수에 따라 매칭되어 함수를 실행시켜 준다

2. 런타임 타입 다형성(오버라이딩(Overriding))

상위 클래스가 가지고 있는 멤버변수가 하위 클래스로 상속되는 것처럼 상위 클래스가 가지고 있는 메서드도 하위 클래스로 상속되어 하위 클래스에 사용할 수 있다. 또한, 하위 클래스에서 메서드를 재정의해서도 사용할 수 있음.
메서드의 이름이 서로 같고, 매개변수가 같고, 반환형이 같을 경우에 상속받은 메서드를 덮어쓴다고 생각하면 됨.' 부모클래스의 메서드는 무시하고, 자식 클래스의 메서드 기능을 사용하겠다'와 같다.


출력

Job Class(자식클래스)에서 Woman Class(부모클래스)를 상속받아 부모클래스에 있는 info()를 재정의하여 사용하였고,
메인메서드에서 Job 객체를 생성하고 호출하였기 때문에 Job클래스의 내용이 실행

extends: 부모의 메소드를 그대로 사용할 수 있으며 오버라이딩 할 필요 없이 부모에 구현되있는 것을 직접 사용 가능하다.
super(예약어): 자식클래스만 호출 했을때 부모클래스의 내용도 그대로 가져오고 싶을때 사용함

성립조건

구분오버로딩오버라이딩
메소드 이름 동일동일
매개변수, 타입다름동일
리턴 타입상관없음동일


캡슐화(Encapsulation): 복잡성을 줄요주고 재사용성을 증가시켜준다.
추상화(Abstraction): 복잡성을 줄여주고 세부사항을 숨기고 필수 사항만 표시해준다.
상속(Inheritance): 중복 코드 제거.
다형성(Polymorphism): 못생긴 스위치문(반복문은 아니지만 비슷한 개념)을 리팩토링 해줌.

<출처>

Object-oriented Programming in 7 minutes | Mosh
라다 it는 정보프렌: 자바[Java] 캡슐화[Encapsulation]란? 무엇인가?
JI-DUM 객체지향
[JAVA] 객체(Object), 클래스(Class) 개념 및 구현
jinan159.log 객체지향
공부해서 남 주자 오버로딩과 오버라이딩 차이와 예제

profile
"한 명이 걷는 천 걸음 보다 천 명이 함께 걷는 한 걸음이 성공의 시작이고 완성이다"

0개의 댓글