4. 변수의 종류와 배열(Array) [프로젝트 : javase05]
[1]변수(Variable)
변수의 분류 - 객체 변수/ 클래스변수 / 지역변수/ 인자형 변수 or 참조형 변수 / 기본형 변수
1. 객체형 변수 (Instance Variable) - non-static field
- 객체형 변수란 ? 클래스 안에 선언되어있는 변수로 [ 필드 혹은 멤버변수 ]라고 부른다.
- 필드의 종류도 2가지가 있다. static이 붙어 있는 것과 static이 없는 것이다. 일반적으로 static이 안붙어 있는 것을 [ 필드 혹은 멤버변수 ]라고 한다.
- 클래스로 객체를 생성할 때마다, (객체.변수)로 사용할 수 있다.
2. 클래스 변수(Class Variable) - static field
- 클래스 변수란 ? 클래스 안에 선언되어 있으면서 static이 붙어 있는 변수로 [ 스태틱 필드 ] 라고 부른다.
- 클래스에만 하나가 존재하여 저장되는 변수로, 객체형변수와는 다르게, (클래스명.변수)로 사용하며,
생성된 여러 객체에서도 호출이 가능하나 (객체.변수) but 클래스 안에 하나의 형태로 저장된다.
3. 지역변수(Local Variable)
- 지역 변수란? 매쏘드()안에 존재하고 있기 때문에, 필드(클래스 안에 존재하는 변수)와 다르게, [반드시 초기화]를 해줘야한다.
- 멤버변수라 불리는 필드는 초기화가 필요없다. 자동으로 초기화가 된다. 그러나 매쏘드()안에 있는 변수는 반드시 초기화를 해줘야한다
4. 인자형 변수(Parameter)
- 인자형 변수란? 다른 언어에서는 argument라고도 불리며, 매쏘드()가 실행 될 때, 넘겨 받는 변수다.
5. 변수의 이름 붙이기(naming) - 식별자(identifier) 규칙
- 숫자로 시작할 수 없으나 영대 소문자나 숫자가 들어갈 수 있으며, 특수 문자 중 [ _ 와 $ ]를 넣을 수 있다.
- 관례(convention) : 소문자로 시작하며, $는 사용하지 않으며, _를 쓸 경우에는 맨 앞에 잘 사용하지 않는다.
ex> String name; (O) String 5name&;(X) / int powerPoint; (O) int _name;(세모)
6. 형태(Type)에 따른 구분
(1) 참조형 변수(Reference Type Variable) : String name; Test t; Object o; 등 앞글자가 대문자로 시작하여, 내부에 클래스를 가지고 있다.
-> 필드와 매쏘드()가 사용 가능
(2) 기본형 변수(Primitive Type Vairable) : int a; float f; char c; 등 소문자로 시작하며, 내부 클래스가 없다. 객체에 속하지 않는 것들임.
[2] 기본형 변수(8)와 참조형 변수
(1) 수치형 변수(6) : 기본형 변수 8가지 중 6가지는 수치를 나타내는 것으로, byte/ short/ int/ long 등 정수형 변수 와
float/ double의 실수형 변수가 있다.
- 순서대로 1/2/4/8 byte 와 4/8byte의 크기를 가진다.
- bit가 0,1로 이루어져있는데, 1byte는 8bit로 bit가 8개 있으므로, 0000 0000 ~ 1111 1111으로 구성 된다.
- byte의 8자리 중 첫번째 bit는 [부호비트]로 0은 양수, 1은 음수를 의미한다. 나머지 7자리의 bit가 숫자를 구성하므로 범위를 따지면 [ -2^7부터 ~ (2^7-1) ]로, 0을 양수에서 -1로 차지한다.
ex> int는 4byte이므로, bit가 8 x 4 = 32 개 존재한다. 첫번재 부호비트를 제외하고 31자리의 bit가 숫자를 결정하므로, -2^31 ~ (2^31-1)의 범위를 가진다.
(2) 문자형 변수(char) : 문자 하나를 표현하는 것이다. 작은 따음표로 감싸서 문자 1개를 표현한다. ex>'가', 'a'
(3) 논리형 변수(boolean) : true or false를 의미한다.
(4)참조형 변수(String) : 문자의 집합로 큰 따옴표로 표시한다. "a가 b는 아니다"
- 기본형 변수들은 [기본값]을 가진다.
byte, short, int는 0 / long은 0L / float는 0.0f / double은 0.0d 가 기본값이다.
char는 '\u0000'의 유니코드 값을 기본값으로 가진다.
boolean은 false를 기본값으로 가진다.
- 모든 참조형 변수는 기본값이 null이다.
(5) 기본형 변수 표기법
- 10진수 표기법 int a = 10;
- 16진수 표기법(0x XXX형식으로 표기) : int a = 0xa; (a는 10을 의미한다)
cf) 16진수는 0부터 9, A(10) ~ F(15)까지 총 16가지의 문자로 숫자를 표현하는 것을 말한다.
- 2진수 표기법(0b XXXX형슥으로 표기) : int a = 0b1010;(1010은 2진수로 10을 의미한다.)
- 실수 일반 표기법 : double d = 123.4;
지수 일반 표기법 : double d = 1.234e2; (e2는 100을 곱하는 것을 의미한다. d에는 123.4가 들어간다)
- 문자 표기법 : char 는 ''; / String은 "";
- 유니코드(UTF-16) 표기법 : 모든 문자는 2byte로 표기가 가능하다. 한글 가 도 2byte이다. '가'의 유니코드 값은 AC00이라는 코드를 가진다. 이런 것들의 모임은 charSet이다.
char c= '\uAC00'; String s= "\uAC00";
- Escape Sequence(특수한 표기법, escape문자) :
\b (backspace), \t(tab), \n(line feed), \r(carriage return, 엔터키), \"(double quote, 쌍따옴표), \'(single quote,작은 따옴표), \\(back slash)
- 언더바(_)문자 사용(se7부터 적용) : 숫자의 시작or끝에는 쓸 수 없고, 중간에 넣어서 구분을 위해서 넣어준다. ex> 전화번호, 카드번호 등등
[3] 배열(array)
- 배열이란? 똑같은 형태의 변수들의 집합체로, 방번호가 붙은 호텔과 같은 개념이다.
int[] a= new int[6];식으로 선언한다. 마지막의 6은 6개의 방을 만들어라는 의미이다.
- 방 번호를 index라 하는데 0부터 시작한다. 0부터 5번방까지 총 6개(length)의 배열이 만들어진 것이다.
- int는 클래스x 대문자로시작x인 기본형 변수이므로, default값= 기본값을 0으로 다 가지고 있다. 만약 2번 방을 끄집어 내고 싶다면, 대괄호 a[2]로 끄집어 낸다.
(1) 생성법은 3가지가 있다
int[] a = new int[6]; - int뒤에 바로 []를 넣어서, 우항에는 방의 번호를 집어넣는다.
int []a = {1, 3, 4, 5, 6, 3}; - 변수앞에 바로 []를 넣어서, 우항에는 값을 집어 넣어, 방번호를 간접적으로 만든다.
int a[] = new int[]{1,2,3,4,5,6}; - 변수뒤에 바로 []를 넣어서, 빈방과 값을 동시에 집어넣는다.
(2) 2차원 배열
int[][] a = new int[2][2]; - int뒤에 넣어서, 2차원 방번호를 집어넣는다.
int[][] a = { {1,2}, {3,4}}; - int뒤에 넣어서, 중괄호를 이중으로 해서 값을 집어넣는다.
[4] 실습
javase05 자바프로젝트를 만들고, 패키지명은 var, 클래스명은 TestVar, 메인함수까지 포함해서 만든다.
package var;
public class TestVar {
//클래스 안에 적었으니, static이 안붙은 [ 필드(field) 혹은 멤버변수 혹은 객체가 쓰는 객체형 변수 ] 혹은 static이 붙어 있는 [클래스 변수]가 될 수 있다.
String name; //static이 안붙어 있으면, 객체가 쓰는 변수로 [쓰는 곳에서는 클래스 객체가 필요하다! 메인함수에서 객체를 만들어서 써야한다]
int height;
static int power=100;
public static void main(String[] args) {
//메인 함수 안에 적었으니, 지역변수(Local variable)이다.
byte b = 1;
short s = 4; //int를 제외하고 잘 안쓰는 byte, short는, 엄청 큰 배열일 경우 크기를 고려할 때 byte배열이나 short배열을 사용한다.
int i = 1000;
long l = 10000000000L; //int의 범위(20억)을 넘는 수를 짚어 넣을 수 있다. L을 안붙히면, int로 인식되서 오류가 뜬다.
float f =3.14f;
double d= 3.14;
char c = '가';
boolean boo = true;
String str = "조재성";
TestVar t = new TestVar();
System.out.println(t.name); //클래스의 객체형 변수, 필드, 멤버변수는 초기화 안해두 null이라는 값으로 자동초기화 되어있다
String name;
System.out.println(name); //메쏘드 안의 지역변수는 , 초기화 하지 않으면, 오류가 뜬다. 지역변수는 반드시 초기화를 해야한다.
String name2="";
System.out.println(name2); //지역변수는, 문자형변수라면 "";로 초기화 해야한다.
}
}
'Java > 심화 개념설명' 카테고리의 다른 글
6. 인터페이스(상세), JavaDoc, 상속, 형변환, 오버라이딩, 다형성, super(생성자/오버라이딩) [javase07] (0) | 2018.02.20 |
---|---|
5. 클래스, 생성자, Overloading, this, 접근제한자, 소유제한자, 객체, JVM메모리구조 [ javase06 ] (0) | 2018.02.19 |
3. 인터페이스 & 패키지 와 API의 개념 (0) | 2018.02.08 |
2. 데이터 캡슐화 & 상속 & 이클립스 폰트 바꾸기 (0) | 2018.02.08 |
1. 객체지향프로그래밍(Object Oriented Programming) (0) | 2018.01.28 |