본문 바로가기
JAVA

자바 강의 6

by leek94 2023. 1. 13.

Ch06. 객체와 배열


 객체 (Object)

 

  • Object 객체 의 구성요소  
  • 속성 Attributes  : 객체의 특징, 데이터  ID, 날짜, 금액, 크기, 상태 등   
    • 클래스에서 변수로 정의  
  • 기능 Operations  :  객체의 기능, 동작  값 셋팅, 값 보여주기, 계산 등    
    • 클래스에서 메소드로 정의  
  • ID : 객체 ID는 JVM에서 내부적으로 각 객체의 고유 식별자  
  • 속성과 기능을 객체의 멤버 구성요소 라고 한다  
    • 멤버 변수, 멤버 메소드  
  • 속성은 특정 데이터 또는 다른 Object가 될 수도 있다  고객 객체의 속성으로  주문 객체가 있을 수 있다   
  • UML : 객체지향분석과 설계를 위한 모델링 언어로 시스템 개발과정의 원활한  의사소통을 위한 표준화 언어

 

 

용어 구분

 

 

  • Class, Object, Instance 용어 구분  
    • 클래스 Class  : 붕어빵 틀 Template  = 하나의 붕어빵 틀로 수많은 붕어빵 객체를 만들 수 있다  
    • 객체  Object   : 붕어빵 들 , 객체는 인스턴스를 포함하는 일반적인 의미  
    • 인스턴스  Instance  : 각각의 붕어빵  인스턴스는 클래스를 통해 생성된 객체의 한 예이다   
    • 인스턴스화  Instantiate  :  붕어빵을 굽다  클래스로부터 인스턴스를 생성하는 것

 

클래스, 객체, 인스턴스의 차이점

 

클래스 객체
제품 설계도 제품
TV 설계도 TV
붕어빵 기계 붕어빵

만들어진 인스턴스 마다 속성이 다르다 각가 다른 메모리에 생성됨

 

객체의 생성과 Object reference variables

 

  • class로 부터 인스턴스를 생성할 때는 new 라는 키워드를 사용한다  
    • Step 1 : 선언     
    • ClassName identifier;     
    • Order orderVar;  <- Object reference variable 선언     
  • Step 2 : 초기화     
    • identifier = new ClassName  ;     
    • orderVar = new Order  ;  
  • 선언과 생성을 같이 할 수 있다     
    • ClassName identifier = new ClassName  ;     
    • Order orderVar = new Order  ;

 

객체 참조 변수의 초기화

 

  • new 라는 키워드로 인스턴스를 생성시에 멤버변수들은 각 데이터 타입의 기본값 Default Value 로 초기화 된다
자료형 기본값
boolean false
char '\u0000'
byte 0
short 0
int 0
long 0
float 0.0F
double 0.0D
All reference type null

 

  • 객체를 초기화한다는 것은 객체에 데이터를 저장하는 것을 의미한다  
  • 참조 변수를 통해 객체를 초기화 할 수 있다  
  • 생성된 인스턴스의 멤버 변수나 메소드 에 접근할 때는 dot . 을 사용한다

 

  • 앞의 예제에서 참조 Reference  변수는 stack 영역에 참조할 수 있는 값 주소 만 을 저장하며, 실제 할당된 데이터들은 Heap 영역에 Student 객체내의 멤버 변 수들에 저장된다

 

 

객체 참조 변수 - Memory

 

  • 객체는 아래와 같은 순서로 초기화되고 메모리에 할당된다  

① 선언된 상태에서는 메모리의 reference를 위한 공간만을 할당함  

② new 연산자를 사용해야만 MyDate를 위한 공간이 할당됨  

③ 멤버들의 명시적인 초기화  

④ 생성자를 실행  

⑤ 변수에 Reference값 할당 

 

public class MyDate {

private int day = 1;

private int month = 10;

private int year = 2000;

public MyDate (int day, int month, int year) {

this.day = day;

this.month = month;

this.year = year; } }

 

  • 기존에 생성된  Reference 변수에 다른 Reference 변수를 할당하면 기존의   Reference를 끊고 새로운 인스턴스를 Reference 한다

 

int counter = 10;

Student std = new Student  ;

Student otherStd = new Student  ;

std = otherStd; <-otherStd와 동일한 인스턴스를 Reference 한다

 

문자열을 저장하는 Reference type의 class로 Java API  java.lang.* 내에 포함되어 있다  

String class는 new 키워드를 사용하는 방법과 new 키워드 없이 생성하는 두 가지 방법 을 제공한다  

String 문자열은 객체는 Heap Memory내에서도 문자열 리터널 값을 String Pool에 저 장해놓고 동일한 문자열을 생성하면 동일한 리터럴 값의 주소를 할당해준다  

new로 생성한 경우엔 일반 객체처럼 Heap 영역에 값으로 생성된다 

 

  • 선언

ClassName identifier;

String myName;

 

  • 문자열 생성 및 값 할당

identifier = new ClassName (“문자열” );

myName = new String (“홍길동”) ;

String myName = new String (“홍길동”) ;

String myName = 홍길동; <- new 키워드 없이 생성

 

배열(Array) 정의

  • 배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것으로 reference type 변수 를 지원한다  
  • 자바 프로그래밍 언어에서 배열 Array 은 동적으로 생성되는 객체이며,  Object 타입의  변수로 할당된다  
  • 배열은 Object 클래스의 모든 메소드를 호출할 수 있다  
  • 배열의 컴포넌트는 0에서 n-1까지의 정수 인덱스를 사용하여 reference한다  
  • 배열안에 포함된 변수는 이름은 없다  
  • 이 변수를 배열의 ‘컴포넌트 component ’라고 부르며, 배열이 n개의 컴포넌트를 갖고  있다면, n을 그 배열의 ‘길이 length ’라고 한다

 

배열(Array) 선언 및 할당

 

  • 배열은 타입 또는 변수이름 뒤에 대괄호   (“[ ]”)  를  붙여서 선언한다  
  • 배열 선언 후 할당을 해야만 값을 저장할 공간이 생성된다  
  • 배열은 객체이며 Object reference variable이다.  기본형 Primitive type , 참조형  Reference Type 을 다 선언하여 사용할 수 있다  
  • 선언과 할당 Case 2의 경우 선언과 할당을 동시에 한다.콤마로 구분하여 입력된 개수만큼 배열을 생성한 후 값을 할당

  • 생성된 배열 인덱스마다 값을 저장 한다  
  • 값을 저장할 때는 저장할 배열의 위치  index 를 지정하고 배열 선언시 지정 했던  데이터타입에 맞는 값을 할당한다
  • index 선언은 0부터 시작한다  (지정한 배열개수 -1)

 예)   int[] ages = new int [5];              

ages[ 0 ] = 20;              

ages[ 1 ] = 15;              

ages[ 2 ] = 33;              

ages[ 3 ] = 42;              

ages[ 4 ] = 19;

배열의 활용

  • Array Length : ’배열이름.length’는 배열의 크기를 알려준다

   int[]  ages = { 20,100, 72, 32, 50 };

   for  int i = 0; i < ages.length; i++   {

   System.out.println  (ages[ i ]) ;     

   }   

  • 배열의 예외  Exception    : 배열의 접근시 int 값으로 해야 하며, long type은 compile time에 에러를 발생시킬 수 있

     long longLength = 10L     

     long longTypeArray = new long[longLength] <= compile error..  

 

  • 배열에 대한 접근은 runtime에 확인되며, 0보다 작거나 배열 길이보다 크거나 동일한 index  배열의 length와 동일한 값으로 배열은 length-1 까지의 index를 가진 다 를 사용 하면 ArrayIndexOutOfBoundException이 발생한다  
  • 만약 배열의 사이즈의 정의할 때 음수를 사용하게 되면 NegativeArraySizeException이 발생한다

배열의 메모리

 

  • 기본 데이터형 배열 (Primitive Type Array)

  • 참조형 배열  Reference Type Array

 haOrder order = new Order  ;

     Order[] orders = {

     new Order 1, "라면" ,

     new Order 2, "세제" ,

     new Order 3, "과자"   }

 

다차원 배열(Array) 선언 및 할당

 

  • Spreadsheet와 비슷하다. rows and columns   
  • 1차원 배열과 Syntax가 비슷하며 ‘[]’ 개수가 차원의 수를 의미한다  
  • 2차원 이상의 배열은 가변적으로 생성할 수 있어 가변 배열이라고도  한다

 

2차원 가변 배열의 예

 int[ ][ ] ages = new int[5][ ];

 ages[0] = new int[4];

 ages[1] = new int[2];

 ages[2] = new int[2];

 ages[3] = new int[3];

 ages[4] = new int[2];

 * 값 할당

 ages[0][1] = 20;

 …

 ages[4][1] = 17;

 

 Cint[ ][ ] ages =

   {

    {  20, 15, 33, 72 },

    {  12, 50 },

    {  57, 20 },

    {  27, 32, 89 },

    {  73, 17 }

}

 

 

 

 

 

 

'JAVA' 카테고리의 다른 글

스트림2  (0) 2023.02.24
자바 강의 7  (0) 2023.01.27
자바 강의 5  (0) 2023.01.02
자바 강의 4  (0) 2022.12.28
자바 강의 3  (0) 2022.12.28