본문 바로가기

Contact English

【Java】 1강. 자바 시작하기

 

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의 구조

 

출처 : 이미지 클릭

Figure. 2. 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. StringTokenizerInteger.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

① 오직 특수한 자료형의 변수만이 사용될 수 있음

○ byteshortcharintEnumStringCharacterByteShortInteger 

⑶ while

⑷ do-while

① 먼저 do에 있는 코드를 execute하고 while에 있는 조건을 확인

⑸ for

⑹ for-each

① 문법

 

for (type variable : arrayname) {
  // code block to be executed
}

 

② array를 통해 반복하고자 할 때 쓰는 특수한 for문

try-catch  

 

 

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