mini 발표. OOP

독기산·2022년 11월 18일
1

OOP 발표

목록 보기
1/2


객체를 모르는 자바 개발자 . .

발표에서 질문주셨던

1. OOP 키워드 별로 훑어보기


keyword
객체(object)
클래스(class)
추상화(abstraction)
캡슐화(encapsulation)
상속(inheritance)
다형성(polymorphism)
연관(association)
집약(aggregation)
구성(composition)

1.0 객체 지향 프로그래밍

부품에 해당하는 객체를 만들고, 이것들을 조립해서 완성된 프로그램을 만드는 기법을 OOP라고 함.
객체의 개념 객체의 상호작용

객체 지향 == 객체 중심적
'클래스를 어떻게 짤까?' ❌
'현실에 존재할 객체가 어떻게 동작할까?' ⭕️
'메모리 상에 존재하는 객체를 어떻게 만들까? 그리고 어떻게 이용할까?' ⭕️

1.1 객체

  • 객체는 필드(속성)과 메소드(동작)으로 구성
  • 클래스(설계도)와 필드&메소드(재료)를 가지고 만들어진게 객체!

1.2 객체의 상호작용

  • 객체들 사이의 상호작용 수단은 메소드
  • 객체가 다른 객체의 기능을 이용하는 것이 메소드 호출
  • 객체의 상호작용은 객체 간의 메소드 호출을 의미하며, 매개값과 리턴값을 통해 데이터를 주고 받음

1.3 객체 간의 관계

  • 집합 관계: 하나는 부품이고 하나는 완성품
  • 사용 관계: 객체 간의 상호작용
  • 상속 관계: 상위 객체를 기반으로 하위 객체를 생성

1.4 객체 지향 프로그래밍의 특징

캡슐화

  • 객체의 필드와 메소드를 하나로 묶고, 실제 로직은 감추는 것
  • 자바는 캡슐화된 멤버를 노출시킬 것인지, 숨길 것인지 결정하기 위해 접근 제어자 사용

상속

  • 상위 클래스에 개발된 객체를 재사용해서 새로운 객체를 만들기 때문에 코드 중복 줄일 수 있음
  • 유지 보수 시간 최소화
    (상위 개체 수정 -> 모든 하위 개체 수정 효과
  • 하지만 ,,, 상속보다는 합성(composition)

다형성

  • 같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질
  • 자바는 다형성을 위해 부모 클래스 또는 인터페이스의 타입 변환 허용
  • 다형성의 효과로 객체는 부품화가 가능

1.5 객체와 인스턴스

  • new 연산자로 생성된 객체는 메모리 힙(Heap) 영역에 생성됨
    (현실 세계에서 물건의 위치를 물건을 사용할 수 없듯, 객체 지향 프로그램에서도 메모리 내에서 생성된 객체의 위치를 모르면 사용할 수 없음)

  • 클래스는 객체가 되어야 사용 가능. 클래스는 동작과 속성 X

  • Heap 메모리의 Book 객체를 사용하려면 반드시 Book 객체를 참조하는 참조 변수 필요

  • 클래스(설계도)와 필드&메소드(재료)들을 통해 만들어진게 객체

Book b = new Book();
  • Book은 클래스인가 참조 자료형(참조 타입)인가?

    • 둘 다 맞음!

    참조 자료형

    • 변수의 자료형은 기본 자료형과 참조 자료형 2가지
    • 기본 자료형은 사용하는 메모리가 정해져 있는 자료형
    • 참조 자료형은 클래스를 타입으로 변수를 선언하는, 객체를 참조하는 자료형

인스턴스는 왜 필요할까?

  • 인스턴스 사용 전
    • Print 메소드 돌려막기
    • static 필드, 메소드 호출
    • 필드의 값을 계속 변경
  • 인스턴스 사용 후
    • 메소드 재정의하여 사용 -> 다형성 이용, 확장성 증가

클래스와 인스턴스의 차이점
클래스는 원형. 인스턴스는 클래스를 복제한 것.
인스턴스는 메소드를 호출함을 통해 인스턴스를 조작

2. 클래스의 구성 멤버


2.1 필드

  • 객체의 고유 데이터, 객체가 가져여 할 부품, 객체의 현재 상태 데이터를 저장하는 곳
  • 클래스 멤버 변수라고 부르는 것 지양!

필드 선언

  • 클래스 외부에서 사용할 경우 우선적으로 클래스로부터 객체를 생성한 뒤 필드를 사용해야 함
  • 그 이유는 필드는 객체에 소속된 데이터이므로 객체가 존재하지 않으면 필드도 존재하지 않기 때문

2.2 생성자

  • new 연산자와 같이 사용되어 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화 담당

2.3 메소드


3. 클래스 필드(클래스 변수)


예제 코드

  • static 키워드가 붙은 필드

  • 클래스 정보를 읽어들일 때 static한 필드는 static 메모리 영역에 따로 저장됨

STATIC 메모리 영역

  • 필드 부분에서 선언된 (전역)변수 static 키워드가 붙은 자료형 혹은 메소드는 static 영역에 데이터 저장
  • static 영역은 프로그램의 시작과 함께 할당되며 프로그램이 종료되면 소멸
    • 전역변수가 프로그램이 종료될 때까지 어디서든 사용 가능한 이유

내용 정리 QnA

Q. static 메서드에서 static 메소드 호출이 가능할까?
A. Yes
Reason : static끼리는 객체없이 서로 호출이 가능하기 때문이다.

Q. static 메서드에서 인스턴스 변수 사용이 가능할까?
A. No
Reason : Static메서드는 객체를 생성하지않고 사용하고 인스턴스는 객체를 생성해야 사용할 수 있는데, static 메서드에서 인스턴스 변수를 사용할 경우 객체가 생성되어있지 않을 수 있기 때문이다.

Q. static 메서드에서 인스턴스 메서드 호출이 가능할까?
A. No
Reason : Static메서드는 객체를 생성하지않고 사용하고 인스턴스는 객체를 생성해야 사용할 수 있는데, static 메서드에서 인스턴스 메서드를 사용할 경우 객체가 생성되어있지 않을 수 있기 때문이다. (위와 동일 개념)

profile
도끼든 산독기

1개의 댓글

comment-user-thumbnail
2022년 12월 20일

좋은 글 잘 봤습니다~ 제 블로그도 놀러오세요^^

답글 달기