1강. 자바 시작하기
추천글 : 【Java】 Java 목차
1. 자바 실행하기 [본문]
2. 출력 스트림 [본문]
3. 변수 [본문]
4. 자료형 [본문]
5. String [본문]
6. operator precedence [본문]
7. 특수구문 [본문]
8. array [본문]
a. GitHub
1. 자바 실행하기 [목차]
⑴ javac
① .java 파일을 compile 하여 .class 파일을 생성시키는 compiler
② .class 파일은 executable file이 아님
⑵ JVM(java virtual machine)
① .class로 표현된 java bytecode를 JVM에서 실행시키는 interpreter
② platform-specific linking을 가능하게 함
2. 출력 스트림 [목차]
⑴ 자세한 File I/O는 뒤에서 다룰 예정
⑵ System.out
① 자체적으로 자신의 버퍼를 가지고 있음
② 적절한 타이밍에 flush하기 때문에 비교적 늦게 출력됨 : Console에 출력
③ System.out.println
○ System.out.println(I);의 경우 System.out.println(I.toString());으로 자동변환됨
○ IntelliJ IDEA에서 sout을 입력하고 tab 버튼을 누르면 자동으로 System.out.println();으로 전환됨
○ 주요 특수문자 (추후 업데이트)
○ "\n" : break line
○ "\t" : tab
○ "\b" : 덧써서 프린트하는 표시
○ "\\" : back slash \
⑶ System.err
① 자체적으로 자신의 버퍼를 가지고 있음
② 거의 바로 flush 됨 : Console에 출력
③ Netbeans Console 상에서는 빨간색으로 표시하기도 함 (ref)
④ System.err를 재빨리 flush하기 위해 System.err가 포함된 코드는 전체적으로 느려짐
3. 변수(variable) [목차]
⑴ 변수명 : letters, digits, _, $
① primitive variable의 이름은 대개 소문자로 시작하고 파스칼 표기법을 따름
② non-primitive variable의 이름은 대개 대문자로 시작하고 파스칼 표기법을 따름
⑵ 변수의 위치 : class 내부 또는 method 내부
⑶ 변수가 class 내부에 있는 경우 자동으로 0으로 초기화
⑷ method 내부에 있는 경우 print 등을 할 때 컴파일 에러
java: variable x might not have been initialized
4. 자료형과 메모리 [목차]
⑴ java의 자료형
Figure. 1. java의 자료형
① byte : 8 bits (1 byte)
② short : 16 bits (2 bytes)
③ char : 16 bits (2 bytes)
○ 다른 언어에서 char는 8 bits
○ 유니코드를 처리하기 위함
④ int : 32 bits (4 bytes)
⑤ long : 64 bits (8 bytes)
○ long l = 1000L;과 같이 선언해야 함
⑥ float : 32 bits (4 bytes)
⑦ double : 64 bits (8 bytes)
⑵ type casting
① widening casting
○ small → large
○ automatically
○ byte → short = char → int → long → float → double
② narrowing casting
○ large → small
○ manually : (type)을 앞에 써 주어야 함
○ double → float → long → int → char = short → byte
③ (참고) object casting의 경우 up-casting, down-casting이라는 말을 씀
④ (참고) C++에서는 widening casting과 narrowing casting 모두 자동으로 수행됨
⑶ 자료형과 메모리
① RAM의 구조
○ heap과 stack은 data를 직접 저장하지 않고 data가 저장된 위치를 저장
○ stack : primitive variable의 physical address 또는 object의 reference를 저장. last-in-first-out
○ heap : object의 physical address를 저장. first-in-first-out
○ (참고) C / C++은 heap에 메모리를 할당할 때 object인지를 불문하고 new를 통해 explicit하게 저장
② 자료형에 따른 java의 memory allocation
Figure. 3. 자료형에 따른 java의 memory allocation
③ garbage collector
○ java에서는 garbage collector가 더이상 사용하지 않는 object의 메모리를 회수함
○ C / C++에서는 explicit하게 memory free를 해주어야 함
5. String [목차]
⑴ String 인스턴스 내 특정 문자를 바꾸는 것은 불가능함 : 이는 배열과 대조적
① 한 번 생성된 객체는 바뀌지 않음
② toUpperCase()와 같은 함수는 새로운 String 객체를 생성해서 return하는 것
⑵ initialize
① String array 선언의 경우 바로 initialize를 하여도 new String[]이 생략된 것이기에 String pool에 저장되지 않음
② String 변수를 별도로 초기화하지 않으면 "The local variable ## may have not been initialize"라는 에러문구가 뜸
○ String str;은 String str = null;과 달리 초기화가 돼 있지 않아 어떤 메모리를 가리키는지 모름
○ 반복문에서만 위 에러가 발생함 : 반복문에서는 메모리가 중요한 이슈가 되기 때문
⑶ 예제 1. String은 primitive type과 같이 쓰일 수 있도록 배려받음 : 이는 배열과 대조적
String appleOne = "Apple";
String appleTwo = "Apple";
System.out.println(appleOne == appleTwo)
// true
String appleObjOne = new String("Apple");
String appleObjTwo = new String("Apple");
System.out.println(appleOne == appleTwo)
// false
① appleOne이나 appleTwo와 같이 선언하면 그 변수들은 String pool 내 동일 메모리를 공유함
② (참고) String pool은 heap 내부에 있음
③ appleOne의 값을 pear로 바꾸면 String pool 내 다른 메모리를 점유함
④ appleTwo의 값을 orange로 바꾸면 String pool 내 다른 메모리를 점유함
⑤ 기존에 String pool 내 Apple이라는 메모리는 java garbage collector에 의해 제거됨
⑥ String pool의 size는 JVM을 통해 정의할 수 있으며 따로 설정하지 않으면 디폴트 값으로 설정됨
⑦ appleObjOne이나 appleObjTwo와 같이 선언하면 각각 String pool 바깥의 서로 다른 메모리를 점유함
⑷ 예제 2. equals() 함수 : String 객체의 경우 == 연산자 대신 equal() 함수를 사용해야 함
public class Main{
public static void main(String[] args){
String a = new String("abc");
String b = new String("abc");
System.out.println(a == b); // false
System.out.println(a.equals(b)); // true
char[] A = {'a', 'b', 'c'};
char[] B = {'a', 'b', 'c'};
System.out.println(A == B); // false
System.out.println(A.equals(B)); // false
}
}
⑸ 예제 3. 동일한 메모리를 가리키는 경우 : A에 새로운 메모리를 저장시켜도 B는 변하지 않음
public class Main{
public static void main(String[] args){
String A = "one";
String B = A;
A = "two";
System.out.println(B); // one
}
}
⑹ 예제 4. substring 함수는 새로운 String 객체를 반환함
String greet = "Hi";
String name = "Smedley";
String nickName = name.substring(0,4);
if (nickName == name.substring(0,4))
System.out.println("A"); // this will be printed
else if (greet + name == greet + nickName)
System.out.println("B");
else
System.out.println("C");
⑺ 예제 5. StringTokenizer와 Integer.parseInt는 유용하게 사용됨
public class test {
public static void main(String[] args){
String str = "34@1@100@5";
StringTokenizer st = new StringTokenizer(str, "@");
int sum = 0;
while(st.hasMoreTokens()){
sum += Integer.parseInt(s);
}
System.out.println(sum); // 140
}
}
6. operator precedence [목차]
⑴ () [] -> . ::
⑵ ! ~ - + * & sizeof type cast ++x --x
⑶ * / %
⑷ + -
⑸ << >>
⑹ < <= > >=
⑺ == !=
⑻ &
⑼ ^
⑽ |
⑾ &&
⑿ ||
⒀ ? :
⒁ = += -= *= /= %= &= ^= <<= >>=
7. 특수구문 [목차]
⑴ if-else
① if 문에서 bracket { }를 생략하면, 바로 다음 한 문장만 if 문에 종속된 것으로 간주
② short circuit evaluation
int x = 0, y = 1;
if(x == 1 && (++x + y) % 2 == 0){ }
System.out.println("X : " + x);
// X : 0
⑵ switch-break
① 오직 특수한 자료형의 변수만이 사용될 수 있음
○ byte, short, char, int, Enum, String, Character, Byte, Short, Integer
⑶ while
⑷ do-while
① 먼저 do에 있는 코드를 execute하고 while에 있는 조건을 확인
⑸ for
⑹ for-each
① 문법
for (type variable : arrayname) {
// code block to be executed
}
② array를 통해 반복하고자 할 때 쓰는 특수한 for문
8. array [목차]
⑴ 문법
type[] variableName = new type[] {obj1, obj2, ...}
type[] variableName = {obj1, obj2, ...}
type[] variableName = new type[length] {obj1, obj2, ...} // compile error
⑵ 다음 표현이 모두 가능함
int[] a = new int[6];
int b[] = new int[6];
int[] a; // possible
System.out.println(a.length); // error
⑶ 만약 배열 객체를 지정해 주지 않으면 배열명은 포인터에 지나지 않음
char[] str = "Hello World!" // error
⑷ java에서 String 형은 문자열 배열 그 이상임 : String 형을 char[]로 형 변환하면 에러가 생김
⑸ ==이나 INSTANCE.equals() 연산은 항상 false를 호출함 : 적절한 용례는 Arrays.equals(array1, array2)
입력: 2020.09.14 00:23
'▶ 자연과학 > ▷ Java' 카테고리의 다른 글
【Java】 5강. 다형성(polymorphism) (0) | 2020.09.23 |
---|---|
【java】 4강. 상속(inheritance) (0) | 2020.09.23 |
【Java】 3강. 캡슐화 (0) | 2020.09.23 |
【Java】 2강. 클래스 (0) | 2020.09.23 |
【Java】 자바로 이진트리와 수식 계산 (0) | 2016.06.27 |
최근댓글