클래스와 객체

배지원·2022년 9월 22일
0

JAVA

목록 보기
8/32
post-custom-banner

1. 객체지향 프로그램

  • 모든 데이터를 객체(object)로 취급하며, 이러한 객체가 바로 프로그래밍의 중심이 된다.
  • 객체란 실생활에서 우리가 인식할 수 있는 사물로 설명할 수 있다. 이러한 객체의 상태와 행동을 구체화하는 형태의 프로그래밍이 바로 객체 지향 프로그래밍이다. 이때 객체를 만들어 내기 위한 설계도와 같은 개념을 클래스라고 한다.
  • 핵심개념 : 캡슐화, 상속, 추상화, 다형성

(1) JVM의 메모리 구조

  • 메서드 영역

    • 어떤 클래스가 사용되면, JVM은 해다 클래스의 클래스파일을 읽고 분석하여 클래스에 대한 정보를 이곳에 저장한다. 이때, 클래스의 클래스 변수도 이 영역에 생성된다.
    • 인스턴스가 생성되는 공간, 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성된다.
      즉, 인스턴스 변수들이 생성되는 공간이다.
  • 호출스택

    • 메서드 수행에 필요한 메모리가 제공되는 공간
    • 메서드가 호출되면 호출스택에 메모리 할당, 종료되면 해제
    • 맨위의 매서드 하나만 실행, 나머지는 대기
      ※ 스택 : 밑이 막힌 상자, 위에 차곡차곡 쌓인다.
      public static void main(String[] args){
      	System.out.println();
      }
      (1)~(2) : JVM에 의해서 main메서드가 호출됨으로서 프로그램이 시작된다. 이때, 호출스택에는 main메서드를 위한 메모리공간이 할당되고 main메서드의 코드가 수행되기 시작한다.
      (3) : main메서드에서 println을 호출한 상태이다. 아직 main메서드가 끝난 것은 아니므로 main메서드는 호출스텍에 대기상태로 남아 있고 println의 수행이 시작된다.
      (4) : println에 더 이상 수행할 코드가 없으므로 종료되고 자신을 호출한 main메서드로 돌아간다.
      (5) : main메서드에도 더 이상 수행할 코드가 없으므로 종료되어, 호출스택은 완전히 비워지게 되고 프로그램은 종료된다.

(2) 클래스(class)

  • 객체를 정의하는 틀 또는 설계도와 같은 의미로 사용된다.

  • 객체의 상태를 나타내는 필드와 객체의 행동을 나타내는 메소드로 구성이 된다.
    필드 : 클래스에 포함된 변수
    메소드 : 어떠한 특정 작업을 수행하기 위한 명령문의 집합

     int radius;					// 필드
     String color;
    
      double calcArea(){			// 메소드
          return 3.14*radius*radius;
      }

(3) 인스턴스(instance)

  • 자바에서 클래스를 사용하기 위해서는 우선 해당 클래스 타입의 객체(object)를 선언해야함

  • 객체를 선언하는 과정을 인스턴스 화라고 하고 이렇게 선언된 해당 클래스 타입의 객체를 인스턴스라고 한다. 즉, 인스턴스 = 객체

    class Circle{
       int radius;
       String color;
       double calcArea(){
           return 3.14*radius*radius;
       }
    }
    
    public class CircleTest {
       public static void main(String[] args) {
           Circle obj;						 // 클래스의 객체를 참조하기 위한 참조변수를 선언
           obj = new Circle();              // 객체를 생성후, 객체의 참조변수에 저장
           Circle obj2 = new Circle();		// 같은 클래스를 호출
           obj.radius = 100;                       // 객체 필드 접근
           obj.color = "blue";
           obj2.radius = 200;
           obj2.color = "green";
           double area = obj.calcArea();           // 객체 메소드 접근
           System.out.println("원의 면적 =" +area);
       }
    }

    코드분석

    1. Circle obj;
    • Circle클래스 타입의 참조변수 obj를 선언한다. 메모리에 참조변수 obj르 위한 공간이 마련된다. 아직 인스턴스가 생성되지 않았으므로 참조변수로 아무것도 할 수 없다.

    1. obj = new Circle();
    • 연산자 new에 의해 Circle클래스의 인스턴스가 메모리의 빈 공간에 생성된다.

    • 이처럼 메모리가 생기고 객체를 생성하여 객체 메소드에 값을 입력하게 되면 메모리공간에 값이 들어가게 된다.

    1. Circle ojb2 = new Circle();
    • 같은 클래스로부터 생성되었을지라도 각 인스턴스의 속성은 서로 다른 값을 유지할 수 있다.

    1. obj2 = obj;
    • obj는 참조변수이므로, 인스턴스의 주소를 저장하고 있다 즉, obj2가 가지고 있던 값은 잃어버리게 되고 obj에 저장되어 있던 값이 obj2에 저장된다. 그렇게 되면 obj2역시 obj가 참조하고 있던 인스턴스를 같이 참조하게 되고, obj2가 원래 참조하고 있던 인스턴스는 더 이상 사용할 수 없게 된다.

(4) 객체 배열

  • 많은 수의 객체를 다뤄야할 때, 배열을 통해 다룰수 있다.
  • 객체 배열안에는 객체가 아닌 객체의 주소가 저장이 된다.
     TV tv1, tv2, tv3;       =>      TV[] tvArr = new TV[3];

profile
Web Developer
post-custom-banner

0개의 댓글