/*
<변수,상수 및 타입>
1.변수(Variable)---------------------------------------------------
-변수(Variable)는 변할수 있는 수(값)을 의미한다.
[타입] [변수 이름]; //타입 한칸띄우고 변수이름
혹은
[타입][변수 이름] = [초기 값];
형태로 선언(Declare) 할수 있다.
-명명법(Naming Convention)으로 카멜 케이스(Camel Case)를 사용해야한다.
-명명법(Naming Convention)
#카멜 케이스(Camel Case)
: 소문자로 시작하고, 단어간 구분을 대문자로 하는 명명법.
가령, someMethod,someVariable,camelCase ...
ex) 학생이름(Student Name)
변수이름-> studentName : 카멜케이스
*Java 에서 메서드,매개변수,지역변수,멤버변수의 이름에 사용된다.
#파스칼 케이스(Pascal Case)
:대문자로 시작하고 단어간 구분을 대문자로 하는 명명법.
가령, SomeClass,SomeEnumeration,P3`ㅇascalCase...
*Java 에서 클래스,열거형,인터페이스,어노테이션의 이름에 사용한다.
#케밥 케이스(Kebab Case)
:전체 소문자이고 단어간 구분을 대쉬(-)로 하는 명명법.
가령, some-class,some-id,some-attribute...
*Java 에서 사용되지 않음.
#스네이크 케이스(Snake Case)
:전체 소문자이고 단어간 구분을 언더스코어(_)로 하는 명명법.
가령, some_name,some_php,some_thing...
*Java 에서 사용되지 않음.
#어퍼 스네이크 케이스(Upper Snake Case)
:전체 대문자이고 단어간 구분을 언더스코어(_)로 하는 명명법.
가령, SOME_NAME,SOME_THING,SOME_CONST...
*Java 에서 정적이고 읽기 전용인 (static final) 멤버변수,열거형 인자의 이름에 사용된다.
단,정적이고 읽기전용인 대상 중 그값이 리터럴(Literal)이지 않고 객체인 경우 카멜 케이스를 사용하기도 한다.
ex)
Math.PI : Math - 파스칼 케이스 , PI - 어퍼 스네이크 케이스
- 변수의 이름은 명사(Noun)이어야 하고, 논리(Boolean) 타입일 경우 `is형용사` 혹은 `is동명사`,`동명사` 이거나
3인칭 단수형의 동사(Verb)인 것이 좋다.
ex)
<명사>
int studentAge; (O)
int saySomething; (x)
- 키워드(Keyword)를 이름으로 사용할 수 없다.
ex) long byte; (x)
- 동일하거나 보다 상위의 스코프(Scope)에서 이미 사용된 이름을 사용할수 없다.
- 선언된 지역 변수의 값이 초기화되어 있지 않은 경우 값 대입을 제외한 그 어떤 접근도 할수 없다. (값이 없는 상황)
- 선언된 멤버 변수의 값이 초기화되지 않은 경우 숫자(정수, 실수 전부)의 경우 0으로, 'boolean' 의 경우 false 로,
'char' 의 경우 빈 값으로 초기화가 이루어진다.
- 지역 상수의 경우 선언과 동시에 값 초기화를 해줄 필요가 없지만, 멤버 상수의 경우 선언과 동시에 값 초기화가 이루어지지 않으면
안된다.
1-1. 변수의 종류
- 지역 변수(Local Variable) : 메서드 내부에 만들어졉 있는 변수를 의미한다. 메서드 실행 종료시 다시는 접근할 수 없는
변수들이고, 1회성이 강하다.
- 멤버 변수(Member Variable) : 클래스가 바로 가지고 있는 변수를 의미한다. 클래스 객체화시 해당 클래스에 대한 접근점이
사라지지 않는다면 영원히 존재하는 변수들이고, 지속성이 강하다.
- 매개 변수(Parameter) : 메서드를 정의할때 해당 메서드가 인자로 받을 값의 변수 타입을 나열한 것이다.
1-2. 멤버 변수
◎ 멤버 변수(Member Variable)는 클래스가 직접 가지고 있는 변수로, 아래와 같이 선언할수 있다.
[접근 제한자] [static]? [final]? [타입] [이름];
혹은
[접근 제한자] [static]? [final]? [타입] [이름] = [초기 값];
2.상수(Constant)----------------------------------------------------
? 자바에는 상수가 없다 : 구글링 해보면 도움됨
-Java 언어에 상수는 엄밀히 얘기하면 존재하지 않고, 읽기 전용(Read-Only)개념이다.
-값이 어떠한 변수에 대입된 후 다시 '변경될 수 없는 것'들을 의미한다.
final [타입] [변수이름];
혹은
final [타입] [변수 이름] = [초기 값];
형태로 선언(Declare)할수 있다. 단,멤버 상수(Member Constant)는 선언과 동시에 값 초기화가 이루어지거나
생성자(Constructor)를 통해 값을 대입해야만 한다.
3.타입(Type)--------------------------------------------------------
*기초타입과 참조타입 명확하게 구분 : 기초타입은 소문자로 시작 하고 참조타입은 대문자로 시작한다
3-1. 기초 타입(원시 타입,Primitive Type)
-`byte` : 정수(Byte)타입으로 , `-128` 부터 `127`까지의 정수를 가질수 있다.
-`short` : 정수(Short integer)타입으로 -32,768 부터 32,767 까지의 정수를 가질수 있다.
-`int` : 정수(integer)타입으로, `-2,147,483,648` 부터 `2,147,483,647` 까지의 정수를 가질수 있다.
-`long` : 정수(Long integer)타입으로, `-9,223,372,036,854,775,808` 부터 `9,223,372,036,854,775,807`
까지의 정수를 가질수 있다. 접미어(Suffix,꼬리에 붙는 말 <-> 접두어)로 L 을 사용한다.
ex) long something = 123; //123 - int타입 ,something - long타입
long something = 123L; //123L - long타입
-`boolean` : 논리(Boolean) 타입으로 참(true) 과 거짓(false)만 그값으로 가질수있다.
ex)
<사용방법>
boolean age = 15; (x)
boolean isDead = true; (o)
boolean isAlive = false; (o)
boolean isEating = false; (o)
boolean eating = false; (o)
boolean contain = false; (o)
-`char` : 문자(Character) 타입으로, 문자 한개만 가질수 있다.단, 값을 가지지 않을 수 없다.
문자 표시를 위해 홑 따옴표('') 특수 기호를 이용해야 한다
ex) char abc = 'f';
-`float` : 실수(Float) 타입으로 , 1.40239846 와 10의 -45승 부터 3.40282347와 10의 38승의 곱 까지의 값을 가질수 있다.
단, 메모리를 아끼기 위한 특수한 조치때문에 소수점 끝자리가 유실되거나
이에 오류(Margin Error)가 발생할수 있다. 접미어로 F 를 사용해야한다.
*3.40282347와 10의 38승의 곱 : 오른쪽으로 38자리 갈수있다.
ex) 3.14F
-`double` : 실수(Double) 타입으로, -4.94065645841246544와 10의 324승의 곱 부터 1.79769313486231570와 10의 308승
의 곱까지의 값을 가질수 있다. 마찬가지로 오류가 발생할수 있지만 미미함으로 대부분의 경우에는 무시하고 사용한다.
접미어로 D 를 사용하거나 생략한다.
ex) 3.14D or 3.14
3-2. 참조 타입(Reference Type)
-`String` : 문자열(String) 타입으로, 문자 여러개를 가질수 있다. 문자열 표시를 위해 쌍따옴표("") 특수 기호를 이용해야 한다.
4. 배열(Array)------------------------------------------------------------------------
- 배열은 어떠한 동일한 타입에 대해 하나의 변수에 여러개의 값(객체)을 가지게 하기위해 사용한다.
- 배열이 가지는 각 인자는 번호를 가지며 그 번호는 반드시 0부터 시작한다.
- 배열의 타입으로 사용하고자 하는 타입 뒤에 대괄호 ( [] )를 붙여 이가 어떠한 타입에 대한 배열임을 알린다.
- 배열의 초기화는 길이 초기화 혹은 인자 초기화 두 방식 중 하나를 이용해야 하며 두 방식을 동시에 이용할 수 없다.
- 배열은 한번 초기화되었을 때 그 길이가 지정되고 다시 초기화하지 않는 이상 그 길이를 줄이거나 늘릴수 없다.
T[] ts;
위와 같이 선언하고 가령 정수 배열을 선언하고자 할때는 아래와 같이 선언한다
int[] numbers;
int[] 타입은 정수가 아닌 정수 배열로, numbers 변수는 정수 여러개를 가질 수 있다.
4-1. 길이 초기화
- 배열의 길이를 지정하여 초기화하는 방식으로, 이 배열이 가질 수 있는 인자의 개수를 지정하는 방식이다.
T[] ts = new int[x];
위 코드에서 변수 ts 는 T 타입의 값(객체)를 x개 만큼 가질 수 있다는 의미이다.
int[] numbers = new int[10];
위 코드에서 변수 numbers 는 10개의 정수를 가질 수 있는 배열 임을 의미한다.
4-2. 인자 초기화
- 배열의 길이를 지정하지 않고 초기화시 배열이 가지는 인자를 직접 전달하는 방식이다.
T[] ts = new T[] {a , b ,c ,.....};
위 코드에서 변수 ts 는 T 타입의 값(객체)인 a , b 및 c를 가지는 T 타입의 배열이다.
int[] odds = new int[] {1, 3, 5, 7, 9};
위 코드에서 변수 odds 는 1, 3, 5, 7 및 9 총 다섯개의 인자를 가지는 정수형 배열이다.
마찬가지로 위 코드는 아래와 같이 간략하게 작성할 수 있다.
------------------------------------
int[] odds = {1, 3, 5, 7, 9};
int[] nums = new int[5];
or
int[] nums = new int[] {1,3,5,7,9};
둘중 하나만 쓰고 섞어서 쓰지 말것
------------------------------------
4-3. 요소 접급
- 어떠한 배열이 가지고 있는 요소에 접근할때에는 배열 요소 연산자를 사용하여 접근하고자 하는 요소의 번호(인덱스)
를 제공하여 접근할수 있다.
T[] ts = new T[] {a, b ,c};
위 코드에서 b 요소에 접근하기 위해서는 아래와 같이 작성한다.
ts[1]
주의할 점은 배열의 요소가 가지는 번호는 항상 0번 부터 시작함으로 위와 같이 두 번째 요소에 접근하기
위한 번호는 1번이 된다.
//-----------------------------
int [] odds = new int[] {1, 3, 5, 7};
odds[2]; //5
//--------------------------------
int [] odds = {1, 3 ,5 ,7 ,9};
odds[4] = 10;
지우거나 빼는것은 새로운 배열을 만들어야 하지만 값을 재할당은 가능하다.
//--------------------------------
4-4. 길이 속성 `length`
- 어떠한 배열이 가지고 있는 오소들의 개수인 속성이다.
T[] ts = new T[10];
System.out.println ( ts.length ); //10
위와 같이 어떠한 배열의 length 속성은 이 배열이 가지고 있는 요소의 개수를 의미함으로 어떠한 배열이
가지고 있는 마지막 요소의 번호(인덱스)는 항상 어떠한 배열의 length 값에서 1을 뺀 값이다.
//-----------------------------------------
int [] odds = {1, 3 ,5 ,7 ,9};
System.out.println ( odds.length ); //5
System.out.println ( odds.length -1 ); //4
//------------------------------------------
*/