Abstraction(추상화)

방혁·2024년 1월 21일

Java

목록 보기
2/4

객체지향 프로그래밍

객체
1. 객체란 ?
주체가 아닌 것, 주체가 활용하는 것
2. 지향 ?
객체를 많이 만드는 것을 추천
3. 객체지향 프로그래밍의 장점
추가 수정 삭제가 용이
재사용성이 높다

Class와 Object

  • 현실의 객체가 갖는 속성과 기능은 추상화되어 클래스에 정의
  • 클래스는 구체화되어 프로그램의 객체가 됨
  • 현실의 객체는 우리가 만지고 느낄 수 있는 것
  • ex) 붕어빵틀(class) 붕어빵(object)
  • 추상화한 결과가 class
  • 이를 구체화하는 것이 바로 object(객체)

클래스

  • 객체를 정의해 놓은 것
  • 데이터 타입

객체

  • 클래스를 데이터 타입으로 메모리에 생성되어 실제로 동작하는 것

객체 생성과 메모리
JVM의 메모리 구조

  • meta-space
    클래스 정보
  • stack
    메서드들의 실행 공간
  • heap
    객체를 저장하기 위한 영역
    가비지 컬렉션으로 정리
    상수풀

변수

선언 위치에 따른 분류
1.멤버변수

  • 클래스 영역(static) - 클래스 멤버 변수
  • 클래스 영역 - 인스턴스 멤버 변수
  1. 지역변수
  • 함수 내부 - 지역변수
  • 함수 선언부 - 파라미터 변수

인스턴스 멤버 변수의 특징
생성 : 객체가 만들어질 때
초기화 : 타입별로 기본값
접근 : 객체 생성 후 객체 이름으로 접근
소멸시점 : Garbage Collector에 의해 객체가 없어질 때 (명시적 x)

클래스 멤버 변수의 특징
- static 키워드가 핵심
- 변할 수 있지만 거의 변하지 않는 것
- 모든 객체가 공유
생성 : 클래스가 로딩될 때
초기화 : 타입 별로 기본값
접근 : 클래스 이름으로 접근
소멸시점 : 클래스가 언로드될 때

지역 변수와 파라미터 변수
- 클래스 영역의 {}이외의 모든 중괄호안
생성 : 선언된 라인이 실행
초기화 : 명시적 초기화
접근 : 외부에서 접근 불가
소멸 시점 : {}을 벗어날 때

메서드

메서드 정의, 필요성
1. 메서드 정의

  • 현실의 객체가 하는 동작을 프로그래밍화
  • 어떤 작업을 수행하는 명령문의 집합
  1. 필요성
  • 중복 방지
  • 코드의 길이를 줄이고, 유지보수

선언부

  • 메서드를 호출하는 곳, 반환되는 값의 타입으로 아무것도 리턴하지 않을 경우 void
  • 결과를 받을 때 묵시적 형 변환
  • 리턴타입은 하나
  • 메서드 호출 시 넘겨줘야 하는 변수들은 파라미터로 선언
  • 메서드 선언 시 동일 타입의 인자가 몇 개 들어올 지 예상할 수 없을 경우
    - 배열 타입 선언이 가능하지만 호출 전 생성 초기화의 번거로움
    - ...을 이용해 파라미터를 선언하면 호출 시 넘겨준 값의 개수에 따라 자동으로 배열 생성 및 초기화

구현부

  • 중괄호 내에서 처리해야 하는 내용
  • 마지막에는 return

호출은 반드시 선언부에 맞춰서 호출

  • 메서드의 이름과 파라미터

메서드도 변수와 마찬가지로 static or non static상태를 구분

static member -> 언제나 메모리에 있음
instance member -> 객체 생성 전에는 메모리에 없음

메서드는 스택의 구조로 실행

메서드 오버로딩

  • 동일한 기능을 수행하는 메서드 추가 작성
  • 예시로 println()
    오버로딩의 장점
  • 기억해야할 매서드가 감소하고 중복 코드에 대한 효율적 관리 가능
    오버로딩 방법
  • 메서드 이름은 동일
  • 파라미터의 개수 또는 순서, 타입은 달라야 할 것
  • 리턴 타입은 의미 없음

생성자

생성자

  • 객체를 생성할 때 호출하는 메서드 비슷한 것
  • 일반 멤버 변수위 초기화 및 객체 생성 시 실행돼야 하는 작업 정리

생성자의 종류
1. 기본생성자

  • 파라미터가 없고, 구현부가 비어있는 형태
  • 생성자 코드가 없으면 컴파일러가 기본 생성자 제공
  1. 파라미터가 있는 생성자
  • 생성자 호출 시 값을 넘겨줘서 멤버 변수 초기화
  • 파라미터가 있는 생성자를 만들면 기본 생성자는 추가되지 않는다 !
  • 따라서 기본 생성자를 추가해줘야함.

this.

  • 참조 변수로써 객체 자신을 가리킴, 자신의 멤버의 접근 가능
  • 용도 : 로컬 변수와 멤버 변수의 이름이 동일할 경우 멤버 변수임을 명시적으로 나타냄
  • 객체에 대한 참조이므로 static영역에서는 this 사용불가
  • 메서드와 마찬가지로 생성자도 오버로딩 가능
  • 반드시 첫 줄에서만 호출이 가능 (생성자내부에서 생성자를 호출시)
profile
반갑습니다 👋

0개의 댓글