[참고] Oracle > Java Documentation > Variables
[참고] 나무위키 - 변수 > 1.3 컴퓨터 프로그래밍
[참고] 위키백과 - 인스턴스 변수
[참고] 위키백과 - 클래스 변수
[참고] 위키백과 - 지역 변수
[참고] 위키백과 - 매개 변수
[참고] 위키백과 - Naming convention (Programing)
운영체제(OS) : Windows10 64bit
개발환경 : JDK8
개발도구 : Eclipse IDE
JDK8 기준 내용임.
네이버 파파고 번역기를 통해 해석한 거라 내용이 이상할 수 있음.
변수란
-
특정 값(data)을 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간을 뜻한다.
-
해당 메모리 공간에는 허용되는 범위 내에 어떤 값이든 저장할 수 있으므로 변수라고 하며, 저장된 값은 변경될 수 있다.
-
허용되는 범위보다 큰 값을 저장하려고 할 때 Overflow가 발생한다.
-
Java 프로그래밍 언어에서 클래스의 필드(field)란 클래스에 포함된 변수(variable)를 의미한다.
변수의 종류
-
인스턴스 변수(비정적 필드) (Instance Variables(non-static fields))
-
클래스 영역에 정의된 변수(예: 멤버 필드) 중 static 키워드를 가지지 않는 변수.
-
비정적 필드에서 클래스의 각 인스턴스(즉, 각 객체)에 고유하기 때문에 인스턴스 변수라고도 한다. 그래서 인스턴스 변수들의 값을 바꿔도 다른 모든 인스턴스에 영향을 미치지 않는다.
-
객체는 비정적 필드에 개별 상태로 저장한다.
-
인스턴스 변수들은 메소드가 정적으로 선언되어 있지 않은 경우 모든 클래스 메소드들에 의해 사용될 수 있다.
-
ex) 한 자전거의 현재 속도는 다른 자전거의 현재 속도와는 독립적이다.
-
-
클래스 변수(정적 필드) (Class variables (static fields))
-
클래스 영역에 위치한 변수 중 static 키워드를 가지는 변수.
-
static으로 선언된, 어떤 필드든 컴파일러에게 클래스가 몇 번 인스턴스화되었든 상관없이 이 변수의 복사본이 정확히 하나 존재한다는 것을 말해준다.
-
ex) 특정 종류의 자전거에 대한 기어 수를 정의하는 필드는 static으로 표시될 수 있다.
static innumGears = 6 은 이러한 정적 필드를 생성한다. 또한, 기어 수가 절대 변하지 않음을 나타내기 위해 final 키워드를 추가할 수 있다.
-
-
지역 변수 (Local Variables)
-
메소드나 생성자, 초기화 블록(중괄호 "{}") 내에 선언된 변수.
-
함수 내부에서만 접근할 수 있으며, 전역 변수(멤버 필드)에서 액세스 할 수 없다.
-
함수 내부에서 선언된 변수는 함수의 호출이 종료되면 메모리에서 제거된다.
-
지역 변수를 선언하는 구문은 필드를 선언하는 것과 유사하다(예: int count = 0;).
-
-
매개 변수 (Parameters)
-
메소드나 생성자, 문법(반복문, 조건문)을 정의 할 때 소괄호 "()" 안에 선언된 변수로, 외부로부터 받아들이는 임의의 값을 의미한다 (예: public static void test(int i) {...}). 보통 매개 변수=parameter=인자값(or 인자)라 말한다. 대부분의 경우 매개 변수는 값에 의한 전달(call by value)의 형태로 동작한다.
-
전달 인자(argument) : 메소드를 호출할 때 전달되는 실제 값을 의미한다(예: test(50);). 보통 전달 인자=argument=인수값(or 인수)라 말한다.
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
package variables;
/*
* 변수 선언 방식.
*
* 1. [예약어] [변수명] = [초기화];
* => 일반적인 변수 초기화.
*
* 2. [예약어] [변수명]; [변수명] = [초기화];
* => 전역 변수로 놓고, 한 클래스 내에서 참조하기 위한 방식.
*
* 3. [예약어] [변수명] = [초기화], [변수명] = [초기화], ... ;
* => 한 클래스 내에서 같은 데이터 형식을 묶어서 사용하는 방식.
* 주로 같은 의미의 변수들을 묶어서 사용한다.
* ex) 환율: double krw = 0.0, jpy = 0.0, usd = 0.0;
*/
public class Variable {
int i = 1; // 인스턴스 변수.
static int j = 2; // 클래스 변수.
static int addition(int x1, int x2) { // 매개 변수.
int i = 3; // 지역 변수.
System.out.println("지역변수 : " + i);
return x1 + x2;
}
public static void main(String[] args) {
Variable t = new Variable();
System.out.println("인스턴스 변수 : " + t.i); // 인스턴스 변수.
System.out.println("클래스 변수 : " + j); // 클래스 변수.
int x1 = 2, x2 = 2;
System.out.println("매개 변수(인수) : " + addition(x1, x2)); // 전달인자.
}
}
|
cs |
자바 명명 규칙 (Java Naming Convention)
-
공통 명명 규칙
-
변수명은 대소문자가 구분되며 길이 제한이 없다(그렇다고 한 없이 길게 표기하면 안 된다).
ex) int i, I;
int abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789ㄱㄴㄷㄹㅁㅂㅅㅇㅈㅊㅋㅌㅍㅎㄲㄸㅃㅉㅆ; -
변수명을 예약어(keywork)로 표기하면 안 된다.
ex) int int; => error: Syntax error on token "int", invalid VariableDeclarator -
API에서 제공하는 class명이나 method명을 사용해서는 안 된다(협업 시 혼란 발생).
ex) String String; => String 클래스를 변수명으로 표기(fail).
String toString; => String의 method 중 toString()을 변수명으로 표기(fail). -
특수 문자는 '_'와 '$'만을 허용한다. 기존 문법에 저 2개를 제외한 특수 문자를 사용하기 때문이다.
자동 생성된 이름에 '$'가 포함되어 있는 경우가 있을 수 있지만, 관례상 '$'가 사용된 적이 없다.
'_'를 시작 문자로 사용하는 것은 기술적으로 합법적이다. 하지만 개발자들끼리의 암묵적인 규칙으로 거의 사용하지 않는다.
ex) int ^i, i^; => error: Syntax error on token "^", delete this token
int _i, $i, __, $$; => OK. 하지만 지양한다. -
시작 문자가 숫자로 올 수 없다.
ex) int 1i; => error: Syntax error on token "1", delete this token -
변수 이름에서 문자 자이에 공백을 사용할 수 없다.
ex) int send box; => error: Syntax error on token "box", delete this token -
두 개 이상의 단어로 구성된 경우 붙여서 표기한다.
ex) int gearRatio, currentGear; -
변수 이름을 표기할 때 은어, 약어 대신 전체 단어를 지향한다(협업 시 가독성 상승).
다만 변수명이 긴 경우 오히려 가시성이 떨어지기에 일정 부분 약어를 허용한다.
예외로 중요 코드가 아니거나 일회성 코드일 경우 약어를 써도 무방하다.
ex) int cadence, speed, gear; => s, c, g 약어 대신 전체 단어 사용.
int sum; double avg; => 개발자 사이에서 많이 쓰는 단어. 일정 부분 약어 허용.
for(int j = 0; j < 10; j++) {} => 일반적인 for문. 중요 코드(X), 일회성 코드(O).
-
-
패키지(Package) 명명 규칙
-
패키지명은 모두 소문자를 사용할 것을 지향한다.
-
패키지명은 표준 패턴을 따라야 한다.
ex) [com].[Company].[Project].[TopPackage].[LowerPackage] -
패키지명은 가급적 한 단어의 명사를 사용한다.
ex) 좋은 예: com.pearlabyss.blackdesert.member.object ex)
나쁜 예: com.pearlabyss.blackdesert.memberObject
-
-
클래스(class)와 인터페이스(interface) 명명 규칙
-
파스칼 표기법(Pascal Case)을 지향한다.
(파스칼 표기법(Pascal Case) : 한 단어의 첫 문자를 대문자로 표기.)
ex) class Naming
class NamingRule
-
-
메소드(Method) 명명 규칙
-
카멜 표기법(Camel Case)을 지향한다.
(카멜 표기법(Camel Case) : 첫 단어를 제외한 나머지 단어의 첫 글자를 대문자로 표기.)
ex) public void naming() {...}
public void namingRule() {...}
-
-
변수(Variable) 명명 규칙
-
스네이크 표기법(Snake Case), 카멜 표기법(Camel Case)을 지향한다.
(스네이크 표기법(Snake Case) : 단어 전부를 소문자로 표현, 단어 사이를 언더바(_)로 구분.) -
실제 개발자마다 변수 명명 규칙이 다르며 파스칼 표기법만 아니면 가시성과 가독성만 만족한다면 상관없다.
-
헝가리언 표기법(Hungarian Case)은 IDE가 좋아지면서 변수명에 타입을 표시해줬을때의 장점이 별로 없어져서 안 쓰는 추세.
ex) int naming;
int naming_rule;
int namingRule; -
상수(Constant) 명명 규칙
-
상수 표기법(CONSTANT_CASE)을 지향한다.
(상수 표기법(CONSTANT_CASE) : 스네이크 표기법에서 전부 대분자로 표현.) -
변수 명명 규칙과 마찬가지로 개발자마다 표기가 다르며 가시성과 가독성만 만족한다면 상관없다.
ex) int NAMING;
int NAMING_RULE;
-
'IT 개발 > JAVA' 카테고리의 다른 글
변수(Variables) - 기본 자료형(Primitive Data Type) (0) | 2021.01.12 |
---|---|
객체 지향 프로그래밍 개념 - 클래스(Class) (0) | 2021.01.10 |
객체 지향 프로그래밍 개념 - 객체(Object) (0) | 2021.01.10 |