JAVA - 객체지향1

장동희·2023년 2월 21일
0

개념 정리

목록 보기
5/5

클래스와 객체

클래스

클래스의 정의 : 클래스란 객체를 정의해 놓은 것입니다.
클래스의 용도 : 클래스는 객체를 생성하는데 사용합니다.

클래스의 탄생 과정
1. 변수 : 하나의 데이터를 저장할 수 있는 공간
2. 배열 : 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간
3. 구조체 : 서로 연관된 여러 데이터(종류 관계 X) 를 하나로 저장할 수 있는 공간
4. 클래스 : 데이터와 함수의 결합(구조체 + 함수)

객체

객체의 정의 : 실제로 존재하는 것! , 사물 또는 개념
객체의 용도 : 객체가 가지고 있는 속성과 기능에 따라 다릅니다.

객체와 인스턴스 용어 정리

  • 객체 : 모든 인스턴스를 대표하는 일반적인 용어 (Tv 객체)
  • 인스턴스 : 특정 클래스로부터 생성된 객체 (Tv 클래스를 사용해서 만든 Tv인스턴스)
  • 인스턴스화 : 클래스 => 인스턴스(객체)

    객체의 구성요소
    객체 = 속성(변수) + 기능(메서드)

객체의 생성 :

클래스명 변수명;
클래스의 객체를 참조하기 위한 참조변수를 선언

변수명 = new 클래스명;
생성된 객체의 주소를 참조변수에 저장

객체 생성 방법
Tv t;
Tv 클래스 타입의 참조변수 t를 선언
t = new Tv();
Tv인스턴스를 생성한 후
생성된 Tv인스턴스의 주소를 t에 저장

변수의 종류

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

클래스 영역 : 클래스 변수

  • 클래스가 메모리에 올라갈 때 생성됩니다.
  • 객체 생성을 하지 않아도 생성되고 언제든지 사용 가능합니다.
  • 접근 방법 : 클래스명.클래스변수명

    클래스 영역 : 인스턴스 변수
  • 객체가 생성될 때 인스턴스 변수가 생성됩니다.
  • 접근 방법 : 참조변수명.인스턴스변수명

    메서드 영역 : 지역 변수
  • 메서드가 호출 되서 실행될 때 생성됩니다.
  • 메서드가 종료되면 자동으로 제거됩니다.

매서드

반환타입 메서드이름 (타입 변수명, 타입 변수명, ... ) // (선언부)
{
                  // 메서드가 호출되면 수행할 코드(구현부)
}

매서드의 장점과 작성 :

장점

  • 중복 코드 제거
  • 관리 용이
  • 재사용 가능

작성

  • 반복적으로 수행되는 여러 문장을 메서드로 작성합니다.
  • 하나의 메서드는 한 가지 기능만 수행하도록 작성하는 것이 좋습니다.

return :

실행 중인 메서드를 종료하고 호출한 곳으로 되돌아갑니다.

  • 반환타입이 void가 아닌 경우, 반드시 return 문이 필요합니다.
  • void 는 컴파일러가 자동으로 메서드 마지막에 return; 을 추가해 줍니다.

호출스택 :

메서드 수행에 필요한 메모리가 제공되는 공간
메서드가 호출되면 호출 스택에 메모리가 할당, 종료되면 해제됩니다.

static 메서드와 인스턴스 메서드

static 메서드(클래스 메서드)

객체 생성 없이 '클래스이름.메서드이름()'으로 호출 : ex) Math.random()
인스턴스 멤버(인스턴스 변수, 인스턴스 메서드) 와 관련없는 작업을 하는 메서드
메서드 내에서 인스턴스 변수 사용 불가합니다.

인스턴스 메서드

인스턴스를 생성한 후, '참조변수.메서드이름()' 으로 호출
인스턴스 멤버(인스턴스 변수, 인스턴스 메서드)와 관련된 작업을 하는 메서드
메서드 내에서 인스턴스 변수 사용가능합니다.

오버로딩

한 클래스 안에 같은 이름의 메서드를 여러 개 정의하는 것입니다.

오버로딩의 성립 조건
1. 메서드 이름이 같아야 합니다.
2. 매개변수의 개수 또는 타입, 위치가 달라야 합니다.
3. 반환타입에는 영향을 받지 않습니다.

사용을 하는 목적

  • 매개변수 즉, 입력하는 값이 다르지만 같은 기능을 수행하는 경우가 많을 때 사용성 및 효율을 높이기 위해 오버로딩을 사용합니다.

생성자

인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메서드' 입니다.

  • 인스턴스 생성시 수행할 작업에 사용됩니다.
  • 초기값이 필요한 인스턴스 변수의 값을 초기화 해줍니다.

    생성 조건
  • 이름이 클래스 이름과 같아야 합니다.
  • return 값이 없습니다.
  • void는 붙이지 않습니다.
  • 오버로딩 가능합니다.

    기본 생성자
  • 매개변수가 없는 생성자를 의미합니다.
  • 생성자를 하나도 선언되어 있지 않았을 때는 컴파일러가 자동으로 추가해 줍니다.

this 와 this()

this

  • 인스턴스 자신을 가리키는 참조변수 입니다.
  • 인스턴스 메서드(생성자 포함) 에서 사용 가능합니다.
  • 지역 변수 와 인스턴스 변수를 구별할 때 사용합니다.

this()

  • 생성자 에서 다른 생성자를 호출할 때 사용합니다.
  • this() 를 사용하지 않고 클래스명(); 이렇게 생성자를 호출하려고 하면 Error 가 발생합니다.
  • 다른 생성자 호출시 첫 줄에서 만 사용 가능합니다.

변수의 초기화

수동 / 자동 초기화

  • 지역 변수는 수동으로 초기화 해야합니다.
  • 지역 변수가 동작하는 스택 메모리는 재사용이 빈번하기 때문에 매번 초기화 해주면 성능이 떨어집니다.
  • 그래서 그냥 해당 메모리에 있는 값으로 덮어 씌웁니다.
  • 근데 해당 주소에 어떠한 값이 있는지 모르기 때문에 Java는 개발자에게 수동으로 초기화 하라고 요구합니다.
  • C 언어에서는 이를 garbage value 라 부릅니다.(C언어와 Java의 차이를 비교하면 이해가 쉽습니다.)
  • 멤버변수(인스턴스 변수, 클래스 변수)는 자동으로 초기화 됩니다.

    멤버 변수의 초기화
  • 클래스 변수 : 클래스가 처음 로딩될 때 단 한번만 초기화 됩니다.
  • 인스턴스 변수 : 인스턴스가 생성될 때 마다 초기화 됩니다.

0개의 댓글