객체지향

호이잇·2023년 7월 3일
0

JAVA

목록 보기
8/12

객체

  • 자신 외의 것들

현실에 있는 것들 OR 현실에 없는 것들을 프로그래밍 언어에 추상적인(간략하게 만드는 것) 형태로 비슷하게 만들어 놓은 것

객체지향의 특징

  • 기존의 프로그래밍 언어와 크게 다르지 않다
  • 코드의 재사용성이 높다
  • 코드 관리에 용이
  • 신뢰성 높은 프로그램 개발 가능

1. class

  • 어떤 대상의 설계도

추상 클래스 == 가구 - 사람이 상상해서 그 물건의 특성을 떠올릴 수 있지만 실제로 만들 수 없는것
(EX) 의자는 가구의 구체개념이지 가구 자체가 아니다
구체 클래스 == 의자 - 사람이 상상할 수 있고 제조법이 명확하다

2. Object

  • 실제로 존재할 수 있는 것을 상상 - 만들어질 의자를 머리 속으로 상상

3.instance

  • 클래스를 통해 Object가 실제화 된것 - 만들어진 의자(new)

  • 객체(object)는 인스턴스(instance)를 포함하는 일반적인 의미

  • 인스턴스화(instantiate, 인스턴스化)
    클래스로부터 인스턴스를 생성하는 것

객체의 구성요소 - 속성과 기능

  • 객체는 속성과 기능으로 이루어져 있다.
  • 객체는 속성과 기능의 집합이며, 속성과 기능을 객체의 멤버 memeber, 구성요소)라고 한다.
  • 속성은 변수로, 기능은 메서드로 정의한다.
  • 클래스를 정의할 때 객체의 속성은 변수로, 기능은 메서드로 정의한다.
  • 자바 객체가 가지고 있는 속성
    -> 필드 / 멤버변수
  • 자바 객체가 가지고 있는 기능
    -> 메소드(함수)

변수와 메서드

선언위치에 따른 변수의 종류

선언위치에 따른 변수의 종류

  • 인스턴스변수
    -각 인스턴스의 개별적인 저장공간, 인스턴스마다 다른 값 저장가능
    -인스턴스 생성 후, '참조변수.인스턴스변수명'으로 접근
    -인스턴스를 생성할 때 생성되고, 참조변수가 없을 때 가비지 컬렉터에 의해 자동제거됨
  • 클래스변수
    -같은 클래스의 모든 인스턴스들이 공유하는 변수
    -인스턴스 생성없이 '클래스이름.클래스변수명'으로 점급
    -클래스가 로딩될 때 생성되고 프로그램이 종료될 때 소멸
  • 지역변수
    -메서드 내에 선언되며, 메서드의 종료와 함께 소멸
    -조건문, 반복문의 블럭{} 내에 선언도니 지역변수는 블럭을 벗어나면 소멸

클래스변수와 인스턴스변수

메서드

  • 메서드란?
    -작업을 수행하기 위한 명령문의 집합
    -어떤 값을 입력받아서 처리하고 그 결과를 돌려준다.
    (입력받는 값이 없을 수도 있고 결과를 돌려주지 않을 수도 있다.)

  • 메서드의 장점과 작성지침
    -반복적인 코드를 줄이고 코드 관리가 용이
    -반복적으로 수행되는 여러 문장을 메서드로 작성
    -하나의 메서드는 한가지 기능만 수행하도록 작성하자.
    -관련도니 여러 문장을 메서드로 작성한다.

JVM의 메모리 구조

스태틱(Static), 스택(Stack), 힙(Heap)

  1. static은 프로그램을 실행할때 메모리(static영역)에 로딩되고 프로그램을 종요하면 없어진다.
  2. stack은 함수를 실행할때 메모리(stack영역)에 로딩되고 함수를 종료하며 없어진다.
  3. heap은 static이 아닌 것들을 부를때 메모리(heap 영역)에 로딩되고 작업 종료 시키면 없어진다
    (JVM에서는 필요없는 구간부터 알아서 없애줌)

  1. 프로그램 실행
  2. 파일에 만들어 둔 클래스와 static 변수 / 함수가 스태틱 영역에 올라간다
  3. main 함수가 실행 된다(스택 영역에 올라간다)
  4. cat 인스턴스가 만들어진다(힙 영역에 올라간다)
  5. cat.cry메소드가 실행된다(스택 영역에 올라간다)
  6. cat.cry메소드가 완료된다(스택 영역에서 내려온다)
  7. cat 인스턴스가 쓰이지 않기 때문에 가비지 컬렉션 된다
    (힙 영역에서 내려온다)
    7.main함수가 완료된다(스택 영역에서 내려온다)
    8.프로그램이 종료된다(스태틱 영역에서 모든 데이터가 내려온다)

복습

static / heap / stack
클래스 -> static
클래스에서 만든 스태틱 함수 -> static
클래스에서 만든 스태틱 아닌 메소드 -> static

클래스로 만든 인스턴스 -> heap
실행 중인 함수 / 메소드 -> static

재귀호출(Recursive call)

  • 메서드 내에서 자기자신을 반복적으로 호출하는 것이다.
  • 재귀호출은 반복문으로 바꿀 수 있으면 반복문보다 성능이 나쁘다.
  • 이해하기 쉽고 간결한 코드를 작성할 수 있다.
    ex) 팩토리얼, 제곱, 트리운행, 폴더목록표시 등

profile
코린이의 전원일기

0개의 댓글