코학다식
Java 시작하기 :: 자바 프로그래밍 기초(2) 본문
Java 시작하기 (3)
자바 프로그래밍 기초(2)
- 변수들
- 자바의 기본 문법은 C/C++과 매우 유사하다.
- 변수 정의
package FirstProgram;
import java.util.Random;
public class VariableDefinition {
public static void main(String[] args){
int one;
int two = 2; // with initialization
int three = 3, four; // multiple definitions in one line
Random generator = new Random(); // definition + class instantiation
}
}
- 변수 이름
- 문자로 시작해야 한다.
- 문자, 숫자, 그리고 $를 포함할 수 있다.
- case-sensitive하다.
- 변수 초기화
- 사용하기 전에 변수는 초기화되어야 한다.
- 초기화되지 않은 변수를 사용한 코드는 잘못된 것이다.
- 상수(Constants)
- 상수를 선언하기 위해서
final
이라는 키워드를 사용한다. final
로 선언된 변수는 수정할 수 없다.- 상수인 변수는 관례적으로 영어 대문자를 사용하여 이름지어야 한다.
- 상수를 선언하기 위해서
- 산술 연산자
- 산술 연산자 또한 C/C++과 유사하다.
- Assignment (=)
x = expression
- 기초 산술 연산자 (+, -, *, /, %)
- 정수를 나누면 결과도 정수가 된다. 만약 부동소수점 숫자로 된 결과를 원한다면 적어도 하나의 피연산자는 부동소수점 타입이어야 한다.
- 단항 연산자
n++
// increment nn--
// decrement n
n++
와++n
의 차이n++
는 해당 라인의 값을 구하고 n을 증가시킨다.++n
은 n을 증가시키고 해당 라인의 값을 구한다.
- Mathematics 메서드
Math.pow(x, y)
: x의 y승을 리턴Math.sqrt(x)
: x의 제곱근Math.min
Math.max
Math.PI
Math.E
Math.random()
: [0, 1) 범위의 랜덤한 숫자를 리턴- 이 메서드들은 static 메서드라고 불린다. (차후 설명)
- 만약 산술 연산자의 두 피연산자가 다른 타입을 가지고 있다면, 두 변수의 타입을 일치시키기 위해 자동으로 타입 변환이 일어난다.
- 그 순서는 다음과 같다.
- 둘 중 한 피연산자가 double이라면, 다른 피연산자가 double이 된다.
- 둘 중 한 피연산자가 float라면, 다른 피연산자가 float가 된다.
- 둘 중 한 피연산자가 long이라면, 다른 피연산자가 long이 된다.
- 그렇지 않다면 두 피연산자는 int 타입이 된다.
- 프로그래머는 변수의 타입을 명시적으로 바꿀 수 있다.
double x = 3.75
→int n = (int) x
- Casting(타입 명시적으로 바꾸기)을 이용한 타입 변환
- 자동: byte → short → int → long → float → double
- 오른쪽 데이터를 왼쪽으로 바꿀 때는 cast operator를 사용해야 한다.
- 참고글
- 산술 연산자와 데이터 타입
- int → long → float → double
- 왼쪽에서 오른쪽으로 변환이 일어난다.
- 정수 타입(int, long) 사이의 나눗셈은 정수이다.
- 관계 연산자와 논리 연산자
==
(equal)!=
(not equal)<
(less than)>
(greater than)<=
(less than or equal)>=
(greater than or equal)- 이 연산자들은
true
혹은false
를 리턴한다. - 관계 연산자는 이들과 함께 쓰일 수 있다.
&&
(logical AND)||
(logical OR)!
(logical NOT)
- 만약 여러 명제가
&&
을 사용해서 결합되어 있고 첫 번째 명제가false
라면 두 번째 명제는 계산되지 않는다. - 만약 여러 명제가
||
을 사용해서 결합되어 있고 첫 번째 명제가true
라면 두 번째 명제는 계산되지 않는다.
-
대입 연산자
-
+=
,-=
,*=
,/=
,%=
j += 5
// j ← j+5
-
비트 연산자
-
<<=
한 비트를 왼쪽으로 이동 -
=>>
한 비트를 오른쪽으로 이동 -
|=
bit OR -
&=
bit AND -
^=
bit XOR
-
-
- 조건부 연산자
time < 12 ? "am" : "pm"
- 만약 time이 12보다 작으면 이 문장의 결과는 "am"이고, 그렇지 않으면 "pm"이다.
- bit-wise 연산자와 shift 연산자
op1 & op2
: AND 연산자가 두 비트들을 비교하고 만약 두 비트가 모두 1이면 1을, 그렇지 않으면 0을 리턴한다.op1 | op2
: OR 연산자가 두 비트들을 비교하고 만약 두 비트가 모두 0이면 0을, 아니면 1을 리턴한다.op1 ^ op2
: EXCLUSIVE-OR 연산자가 두 비트들을 비교하고 만약 두 비트가 다르면 1을, 아니면 0을 리턴한다.~op
: 피연산자의 모든 비트들을 바꾼다.op1 >> op2
: SHIFT RIGHT 연산자는 비트들을 오른쪽으로 이동시키고, 가장 오른쪽의 비트를 버린 뒤 가장 왼쪽의 비트를 0으로 할당한다. 오른쪽으로의 각 이동은 op1을 반으로 나눈다.op1 << op2
: SHIFT LEFT 연산자는 비트들을 왼쪽으로 이동시키고, 가장 왼쪽의 비트를 버린 뒤 가장 오른쪽의 비트를 0으로 할당한다. 오른쪽으로의 각 이동은 op1을 두 배로 만든다.
- 연산자 우선순위
public class LEC {
public static void main(String[] args) {
int x = 1, y = 2, z;
z = x + y*2 - ++x + (y += 3);
}
}
- 위 코드에서
z
의 값은 무엇일까?- 자바는 계산할 때 왼쪽에서 오른쪽으로 진행한다.
- 진행하면서 연산자를 만날 때마다 연산자의 우선순위를 비교해서, 우선순위가 높은 것부터 계산한다.
- 연산자를 만났다고 바로 계산되는 게 아니라, 그대로 진행하다 다른 연산자와 만났을 때 우선순위를 비교해 계산된다.
- 따라서
z
의 값을 얻는 과정은 다음과 같이 이루어진다.- 처음
+
를 만났고, 바로*
를 만난다.*
의 우선순위가 높으므로y*2
(= 4)가 먼저 계산된다. - 이후
-
를 만나는데,+
와-
의 우선순위가 같으므로x + y*2
가 계산된다. (= 5) - 이제
-
를 만나고 이후에++
를 만난다.++
의 우선순위가 높으므로 먼저 계산되어 x는 2가 된다. +
를 만나는데-
와+
의 우선순위가 같으므로-
가 계산된다.x + y*2 - ++x
까지가 계산되어 3이 된다.- 괄호는 우선순위가 가장 높으므로 먼저 계산된다. 괄호 안의 식
y += 3
이 계산되어 y는 5가 되고, 지금까지 계산된 값과 더해져 계산의 최종 값은 8이 된다.
- 처음
- Strings
-
스트링은 문자들의 시퀀스다. 자바 라이브러리는
String
이라는 클래스를 제공한다. 이 클래스는 Primitive type은 아니다. (primitive type은 소문자로만 구성)편의상 클래스
String
을 말할 때는 String이라고 표기하고, 문자들의 시퀀스를 의미하는 string은 스트링으로 표기한다.
-
두 스트링 변수들은
+
로 결합될 수 있다. -
만약 String과 다른 타입의 변수를 결합하면, 그 변수는 String이 된다.
- Static 메서드
join
: 구분자를 사용하여 스트링들을 결합한다.String names = String.join(", ", "Peter", "Paul", "Mary");
//names becomes "Peter, Paul, Mary"
-
Instance 메서드
substring
: 스트링의 substring을 리턴한다.
String greeting = "Hello, World!"; String location = greeting.substring(7, 12); // make substring using greeting's characters(index 7 to 11) // location becomes "World"
split
: 구분자를 사용해서 스트링을 나누고, 나눈 스트링의 배열을 리턴한다.
String names = "Peter, Paul, Mary"; String[] result = names.split(", "); //r result becomes ["Peter", "Paul", "Mary"];
-
이외에도 많은 String 메서드가 존재한다.
-
static 메서드와 instance 메서드?
- 메서드에는 static 메서드와 instance 메서드 두 가지가 존재한다.
- static 메서드는
ClassName.methodName
형식으로 사용하고, instance 메서드는instanceName.methodName
의 형식으로 사용한다.
'Programming > Java' 카테고리의 다른 글
Java 시작하기 :: OOP(3) : 인터페이스를 사용한 추상화 (1) | 2019.09.26 |
---|---|
Java 시작하기 :: OOP(2): 클래스, 변수, 메서드 (0) | 2019.09.24 |
Java 시작하기 :: OOP(1): 클래스, 변수, 메서드 (0) | 2019.09.24 |
Java 시작하기 :: 자바 프로그래밍 기초 (0) | 2019.09.08 |
Java 시작하기 :: 자바란 무엇일까? (0) | 2019.09.04 |
Comments