객체배열
객체배열은 참조변수들을 하나로 묶은 배열을 의미한다.
따라서 객체또한 배열로 다루는 것이 가능함.
-> 단 객체 배열을 생성하는 것은 참조변수들이 만들어진 것일뿐 객체가 생성된 것은 아님!!
따라서 아래와같이 배열의 각 요소에 객체를 생성해서 저장해야함.
library[0]=new Book();
library[1]=new Book();
library[2]=new Book();
library[3]=new Book();
library[4]=new Book();
객체 배열도 배열이기 때문에 같은타입의 객체만 저장할 수 있음!
그러면 여러종류의 객체는 어떻게 저장할 수 있을까?
나중에 나오는 다형성을 배우면 여러 종류의 객체도 다룰수 있게됨.
클래스의 또 다른 정의
- 데이터와 함수의 결합
변수- 하나의 데이터를 저장하는 공간
배열- 같은 종류의 여러 데이터를 저장하는 공간
구조체- 서로 관련된 여러데이터를 종류에 관계없이 저장하는 공간
클래스- 데이터와 함수의 결합(구조체+함수)
- 사용자 정의타입
- 예를 들어 시간과 관련된 데이터를 정의할 때
변수로만 정의하면
int hour; int minute;
과 같이 정의 된다.
그런데 만약 3개의 시간을 다뤄야 한다면?
변수로만 한다면 데이터의 개수가 너무 많아진다.
따라서 배열을 이용
int[] hour=new int[3];
int[] minute=new int[3];
이와 같이 배열로 처리한다면 시간의 데이터가 늘어나더라도 배열의 크기만 변경해주면 되므로 편리해짐.
하지만 배열로 처리하는 것도 시,분,초가 분리되어 있다는 점이 있어 뒤섞일 가능성이 있다.
따라서 시,분,초를 하나로 묶는 사용자정의타입, 클래스를 정의해서 사용함.
class Time{
int hourt;
int minute;
int second;
}
선언위치에 따른 변수의 종류
- 인스턴스변수(iv)
- 인스턴스가 생성되었을 떄 만들어짐.
- 독립적인 저장공간을 가짐 / 인스턴스 별로 다른 값을 가질 수 있음
- 참조변수를 통해 접근, 인스턴스를 반드시 생성해야함
- 클래스변수(cv)
- 인스턴스변수앞에 static을 붙여서 선언
- 클래스가 메모리에 올라갔을 때 만들어짐
- 공통된 저장공간을 가짐 / 모든 인스턴스가 같은 값을 가짐
- 인스턴스를 생성하지 않고도 사용가능(클래스이름.클래스변수)
- 지역변수(lv)
- 메서드, 블럭{ } 내에 선언되어 메서드,블럭{ } 내에서만 사용가능
- 블럭{ }을 벗어나면 소멸됨
클래스변수와 인스턴스변수
인스턴스변수 -> 인스턴스가 생성될때마다 생성됨, 인스턴스마다 다른 값을 가짐
클래스변수 -> 모든 인스턴스가 하나의 저장공간을 공유, 모든 인스턴스가 공통된 값
class Card{
String kind; // 무늬(iv)
int number; // 숫자(iv)
static int width=100; // 폭(cv)
static int height=250; // 높이(cv)
}
메서드
특정 작업을 수행하는 문장들을 하나로 묶은 것
수학의 함수와 같이 어떠한 input을 하면 작업을 처리한 후 ouput을 해줌
그 함수의 내부 동작과정은 별로 알 필요가 없기 때문에 메서드로 처리
메서드를 사용하는 이유는?
- 높은 재사용성
메서드를 한번 만들어놓으면 여러번 호출이 가능하기 때문에 재사용성이 높다. - 중복된 코드의 제거
반복되는 문장을 대신하여 메서드를 호출하기 때문에 중복된 코드를 제거할 수 있다. - 프로그램의 구조화
큰 규모의 프로그램에서 작업단위 별로 메서드에 코드를 담아 처리하기 때문에
프로그램의 구조를 단순화 시킬 수 있다.
메서드의 선언부
반환타입, 메서드의 이름, 매개변수 선언으로 구성
(반환타입) (메서드이름) (매개변수)
int add (int x, int y){
int result=x+y; return result; // 결과를 반환
}
- 반환타입(return type)
작업수행 결과(출력)의 반환값 타입을 적는다.
반환값이 없는 경우는 void - 매개변수
메서드가 작업을 수행하기 위해 필요한 입력값을 제공받기 위한 변수
변수의 타입이 같아도 변수의 타입 생략X
- 메서드의 이름
메서드의 기능을 알 수 있게 의미있는 이름을 짓도록 함(동사인 경우가 많음)
메서드의 구현부
메서드를 호출했을 때 수행될 문장들이 들어간다.
- return문
반환타입이 void가 아닌경우 반드시 return 반환값;이 포함됨.
반환값은 반환타입과 일치하거나 자동형변환이 가능한 것이어야함.
return문은 단 하나의 값만 반환가능 - 지역변수
메서드 내에 선언된 변수로 그 메서드 내에서만 사용할 수 있음
메서드의 호출
- 메서드를 호출하는 방법
메서드이름(값1, 값2, ...);
print99dandAll(); //void print99danAll()을 호출
int result=add(3,5); // int add(int x, int y)를 호출하고 결과를 result에 저장
- 인자와 매개변수
인자의 개수와 순서는 메서드의 매개변수와 일치해야함 !
인자타입 - 매개변수의 타입과 일치하거나 자동형변환이 가능한 것이어야함 !
return문
현재 실행중인 메서드를 종료하고 호출한 메서드로 되돌아감.
반환값이 void인 경우에는 return;이 자동으로 추가됨.
- 반환값(return value)
int add(int x, int y){
return x+y;
}
x+y를 반환하면 수식이 반환되는 것이 아니라 수식을 계산한 결과가 반환됨.
- 매개변수의 유효성검사
매개변수를 구현부를 작성할 때 가장먼저해야하는 것은, 매개변수의 값이 적절한지 확인하는 것임!!
'JAVA' 카테고리의 다른 글
[JAVA] 자바 객체지향 개념 정리(4) (0) | 2021.11.05 |
---|---|
[JAVA] 자바 객체지향 개념 정리(3) (0) | 2021.11.05 |
[JAVA] 자바 객체지향 개념 정리(1) (0) | 2021.11.05 |
[JAVA] 이클립스 설치 및 구성이해 (0) | 2020.12.18 |
[JAVA] 메모장으로 javac로 컴파일 및 실행하기 (0) | 2020.12.17 |
댓글