programming/java

Ch3. Fundamental programming structures in Java (1)

동로시 2019. 10. 8. 01:58

3.1 a simple java program

FristSample.java

public : 다른 클래스에서 접근이 가능

class : 모든 것은 클래스 내에 포함되어 있어야 한다.

FirstSample : 클래스 이름, CamelCase

source code의 파일 이름은 class name으로 저장해야 한다. ex) FirstSample.java

main : JVM이 처음 실행되는 부분

static : Ch.4에서 다루겠음

System.out이라는 객체가 이것의 함수인 println을 호출.

 

- Java에서 method를 호출하는 snytax : object.method(parameters);

파라미터의 수는 0,1,2 .. 

parenthese(괄호)는 파라미터가 없어도 필요함. ex) System.out.println();

 

Naming Convention

  • CamelCase : 단어가 합쳐진 부분마다 맨 처음 글자를 대문자로 표기.
    • lowerCamelCase : 맨 앞글자는 소문자
    • UpperCamelCase(PascalCase) : 맨 앞글자도 대문자
  • snake_case : 단어가 합쳐진 부분마다 _ 을 붙여주는 표기 방법.

Command line

- javac : 컴파일 명령어 (source -> byte code), byte code(.class) source code폴더와 같은 폴더 내에 자동으로 저장됨.

- java : 프로그램 실행 명령어 -> class 함수 중 main함수를 찾아서 JVM 실행

 

3.2 comments

comment라인은 실행되지 않는다.

1. single-line comments : //

2. multi-line comments : /* */

3.  Documentation comments to generate documents automatically : /** @ */

 

3.3 Data Types

Java :  strongly typed language

∴ 모든 변수들은 type이 선언되어야 한다.

8개의 primitive type이 존재한다. 자바는 unsigned type이 존재하지 않는다.

- 6 numeric types

    - 4 integral types : int, short, long(L), byte

        hex : 0x binary : 0b

    - 2 floating-point types : float(F), double(default)

          Double.POSITIVE_INFINTY, Double.NEGATIVE_INFINITY, Double.NaN(숫자가 아님)

- character type : char (for Unicode system) , UTF-16 코드 단위를 조작하지 않는 한 사용 비추

    Unicode System : 세계의 사용되는 언어들을 표현할 수 있는 전 세계적으로 보편적인 인코딩

    UTF-16 encoding에 code unit이 설명되어 있음.

    code point : 코드 값 : encoding system에 의해 결정된다.

    Unicode standard에서는 code point는 hexademical이면 U+ 로 표시된다.

    UTF-16 : 모든 unicode charter는 1/2개의 code unit을 필요로 한다. 

              : variable length code로 모든 유니 코드 포인트를 나타낸다.

- boolean type : true/false

    int type과 Boolean type간의 전환은 없다.

    C/C++에서는 number, pointer도 불린 값으로 사용 될 수 있다. ex) 0 = false

String type : primitive type은 아니지만 library에 정의된 클래스이다.

 

3.4 Declaration of Variables

syntax : <data type> <variable name>

변수는 사용되기 전에 초기화 되어야 한다

final : 한 클래스 내의 한 method에서 local constant로로 사용하도록 하는 keyword.

static final : 한 클래스 내의 모든 method에서 전역으로 사용하도록 하는 keyword.

 

3.5 Operators

a) usual arithmetic operators : + - * / %

b) prefix and postfix operators : ++ --

c) relational operators : == != < <=

d) logical(boolean) operators : && || !

e) ternary operator : a : b ? c : d

f) bitwise operator : & | ^ ~

 

java.lang.Math : 다양한 math function 존재

System.out.println과 math 함수 호출의 차이점은 정적/ 동적 함수

 

- Automatic type conversion(widening)

점선 : 이전 값을 변환하면서 손실 발생

실선 : 손실 허용 X

widening

- Casting : 강제 형변환

Math.round(x) : return long data tye

 

enum : 서로 관련 있는 상수들을 모아 심볼릭한 명칭의 집합으로 정의한 것(ch.5에서 자세히)

    syntax: enum <NameofEnumaration> {nominal1, nominal2 ..};

 

3.6 Strings and substrings

Java에는 내장된 문자열 유형이 존재하지 않다.

하지만, 표준 library에 String이 정의 된 호출이 포함되어 있다.

-> java.lange.String

Java의 String은 Unicode characters의 연속이다.

ex) String literals "Java\u2122"  -> J,a, v, a ,TM(trade mark) \u2122 = U+2122

각 각의 "" string은 String class의 instance이다.

 

String 클래스의 substing 함수를 이용해 더 큰 문자열에서 하위 문자열을 추출(extract) 할 수 있다.

ex) String greeting = "Hello";

     String s = greeting.substring(0,3); == s = "Hel"

     (a, b) : position = start~ length-1, last position is excluded.

     length = b - a

 

+ : 두 string을 합치는데 사용 됨.

만약 하나의 operand가 string이 아니라면, string으로 변환된다.

ex) int age = 13;

    String rating = "PG" + age; (rating = "PG13")

 

String 클래에는 기존 문자열에서 문자를 변경하는 방법이 없다.

String class의 객체는 immutable(변경 불가) : String 인스턴스는 생성할 때 메모리 힙 영역에 할당되어 변경 불가능

ex) String greeting = "Hello"; //greeting은 stack의 변수고, Hello는 heap의 객체이다.

     greeting = greeting.substring(0,3) + p! //greeting = "Hel!p" , 새로운 인스턴스

     -> Hello 인스턴스가 바뀐 것이 아니다.

String 객체의 immutablitiy로 인해 두 개의 메모리 공간(stack memory area, heap momory area)을 고려해야 한다.

또, stack memory의 reference variableheap memory의 한 클래스의 객체의 차이를 알아야 한다.

 

StringOne.equals(StringTwo) : 둘이 같으면 1 반환 (대소문자 구별)

StringOne.equalsIgnoreCase(StringTwo) : 대소문자 구별 X

ex) String greeting = "Hello";

     "Hello".equals(greeting);

     "hello".equalsIgnoreCase(greeting);

※ 문자열 비교를 == 이 아니다.

※ Empthy string(길이가 0) != Null String

empthy string : heap area에 있는 java object다.

null은 스택 영역의 문자열 참조 변수에 해당하는 heap의 객체가 없는 특별한 값이다.

ex) String str =" ";

     str.equals(" ");

     str.length == 0;

ex) String str = NULL;

     str == null; (null의 경우 생성되지 않은 인스턴스이기 때문에 메소드를 사용하는 .equals는 사용 불가능)