짱짱해커가 되고 싶은 나

Ch3. Fundamental programming structures in Java (1) 본문

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는 사용 불가능)

'programming > java' 카테고리의 다른 글

Ch.4 Objects and classes (2)  (0) 2019.10.09
Ch4. Objects and Classes (1)  (0) 2019.10.09
Ch3. Fundamental programming structures in Java (2)  (0) 2019.10.08
Ch2. Java programming environment  (0) 2019.10.07
ch.1 introduction to java  (0) 2019.10.07
Comments