6장 객체지향 - 1 요약

서현우·2022년 6월 23일
0

자바의정석

목록 보기
18/22

6장 객체지향 프로그래밍 - 1

객체지향언어란?

  • 실제 세계를 컴퓨터로 옮긴 가상세계를 만들기 위해 고안되었고, 기존의 프로그래밍 언어에 규칙을 추가하고, 코드간에 서로 관계를 맺어주는 것.
  • 장점은 코드의 재사용성이 높고 유지보수에 유리하다.

클래스란?

객체를 쉽게 만들기 위한 설계도로써 객체를 정의해놓은 것.

객체란?

속성과 기능의 집합. 사물이나 개념같이 존재하는 모든 것을 말하며 속성으로 멤버변수, 기능으로 메서드가 있다.

인스턴스란?

클래스로부터 만들어진 객체를 말하고, 참조변수를 통해서만 다룰 수 있다.

인스턴스화란?

클래스로부터 객체를 만드는 것.

객체와 인스턴스 차이는?

'책상은 객체다.' '책상은 책상클래스의 인스턴스다.'와 같이 클래스와의 관계를 강조할 때는 인스턴스, 아니면 객체라고 한다.

인스턴스가 생성되는 과정

Tv t = new Tv();를 예로들면

1. Tv t; //메모리에 참조변수 t의 공간이 생성된다.
2. new Tv(); //연산자 new와 기본생성자에 의해 Tv클래스의 객체가 메모리의 Heap영역에 생성되고, iv가 초기화된다. 
3. Tv t = new Tv(); //대입연산자로 객체의 주소가 참조변수 t에 저장되고, 참조변수 t는 Tv객체를 가리킨다. 

객체 배열이란?

참조변수들을 하나로 묶은 배열로서, 다형성으로 여러 타입의 객체를 배열로 만들 수 있다.

변수란?

하나의 값을 저장할 수 있는 메모리 공간으로, 멤버변수(cv, iv)와 지역변수가 있다.

  1. 클래스 변수(cv)
    iv에 static을 붙여서 클래스의 클래스 영역에 선언하고, Class Loader로 클래스가 메모리에 로딩될 때 JVM의 메서드영역에 생성된다.
    객체 생성 없이 사용 가능하고, Runtime Data Area의 메서드영역에서 공유하기 때문에, 모든 객체의 공통값을 클래스변수로 선언할 수 있다.

  2. 인스턴스 변수(iv)
    클래스의 클래스 영역에 선언하고, 인스턴스를 만들 때 JVM의 Heap영역에 생성된다.
    인스턴스를 생성해야 사용할 수 있다.

  3. 지역변수(lv)
    클래스의 클래스 영역 이외의 영역에 선언하고, 변수 선언문이 수행될 때 JVM의 호출스택에 생성된다.
    선언된 메서드나 초기화블럭에서만 사용할 수 있고, 블럭을 벗어나면 소멸된다. 사용하기 전에 반드시 초기화해야 한다.

메서드란?

특정 작업을 수행하는 문장들의 묶음으로, 선언부, 구현부로 구분된다.
높은 재사용성, 중복코드제거, 프로그램 구조화(main메서드에서 호출만 하면 됨)에 유리하다.
매개변수가 있을때는 유효성검사를 해야한다.

return문이란?

현재 실행중인 메서드를 종료하고 호출한 곳으로 돌아가는 것.

JVM의 메모리 구조는?

  1. 메서드 영역(클래스영역, static영역)
  • Class Loader로 클래스파일을 읽어서 클래스별로 클래스 정보, 상수 풀, static변수, 메서드 정보 등을 분류해서 저장하는 공간. 모든 쓰레드가 공유한다.
  1. 힙(head)
  • iv와 객체가 생성되는 공간. 모든 쓰레드가 공유한다.
  1. 호출스택(call stack)
  • 메서드의 작업에 필요한 메모리 공간을 제공한다. 이 메모리 공간에는 지역변수와 메서드 연산의 중간결과를 저장하고, 메서드가 종료되면 이 메모리공간은 비워진다.

Heap이란?

완전이진트리형태 구조로 되어있고, 최대값 최소값을 찾기에 유리한 자료구조라서 우선순위 큐를 구현할 때 사용된다.
[heap, stack 추가 요망!!]

기본형 매개변수와 참조형 매개변수의 차이는?

  • 기본형 매개변수는 변수의 값을 읽기만 할 수 있고, 참조형 매개변수는 변수의 값을 읽고 변경할 수 있다.

재귀호출(recursive call)이란?

메서드 내부에서 메서드 자신을 다시 호출하는 것.
반복문보다 비효율적이지만 논리적 간결함 때문에 사용한다.
ex) 팩토리얼

오버로딩(overloading)이란?

한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것.
메서드의 이름이 같아야하고, 매개변수의 개수 또는 타입이 달라야 한다.
메서드 이름을 하나로 통일했기 때문에 직관적이고, 메서드 이름을 절약 할 수 있다.

생성자(Constructor)란?

객체가 생성될 때 호출되는 '인스턴스 초기화 메서드'이다.
인스턴스 변수의 초기화와 인스턴스가 생성 될때 실행되어야하는 작업을 위해서 사용한다.

생성자와 메서드의 차이점은?

생성자는 이름이 클래스와 같아야하고, 리턴값이 없다.

this와 this()의 차이점은?

this는 자기 자신을 가리키는 참조변수로 지역변수와 구별할 때 사용하고, this()는 생성자로 클래스 내의 다른 생성자를 호출할 때 사용된다.

멤버변수의 초기화 방법은?

기본 초기화 - 명시적 초기화 - 초기화 블럭 - 생성자(cv는 X. iv만 O)

profile
안녕하세요!!

0개의 댓글