JAVA

[JAVA] 자바 기초 I

최선을 다하는 2022. 7. 16. 10:07

    2018년도에 동기들과 자바언어 스터디를 하였는데 그때 이해하기에는 어려운 부분도 있었고 대면 스터디라 흐지부지 되는 경향이 있어서 제대로 공부하지 못했던 기억이 있다. 그때 샀던 자바 책 (윤성우의 열혈 Java 프로그래밍) 이 있는데 그때 같이 공부했던 동기가 이번에 다시 공부한다고 하여 좋은 생각인 것 같아 이 책으로 자바를 공부하기 시작할 예정이다.

    이번 학기 프로그래밍 언어를 배우면서 객체 지향에 대한 기본적인 개념이 생긴 것 같아 이해가 원활할 것 같은 느낌이 든다. 이 책의 앞부분은 Java만의 내용이라기 보단 대부분의 프로그래밍 언어에 공통적인 부분이므로 특별히 인상 깊었던 부분만 정리하고 뒤에 객체 지향 프로그래밍 부분으로 넘어오면 조금 더 세부적으로 정리할 예정이다.

 

Chap 3 상수 Constants

- final  : c언어의 const 와 같이 한번 할당 가능하며 변경이 불가능한 변수(상수)

- literal (리터럴, 리터럴 상수) : 대입 연산자 오른편에 위치한 숫자

    - 기본적인 숫자 표현시 정수로 인식한다

- 정수형 상수

    - int num = 157 -> 정수 취급

    - long num = 3147483647 -> error , 숫자가 정수형에서 벗어났다 -> 3147483647L과 같이 L 혹은 l을 붙여줘야 한다.

- 실수형 상수

    - 기본적으로 double형으로 인식 -> 명시하고 싶다면 D, d 추가

    - float로 표현하고 싶다면 F, f 추가

- 형 변환

    - 크기가 큰 정수 자료형 에서 작은 크기의 정수 자료형으로 형 변환 시 상위 바이트가 잘린다.

 

Chap 4 연산자 Operators

- >>> : unsigned right shift

    - >> 의 경우 양수 일시 shift 한 공간을 0으로 채우고 음수 일시 1로 채우는데 >>> 의 경우 상관없이 0으로 채운다.

- 복합 대입 연산자

    - += ,-= 과 같은 표현을 칭하는데 이는 형 변환을 자동적으로 해주어 명시적 형변환을 줄일 수 있다.

    ex)  num = (short )(num + 77L) <==> num += 77L

 

Chap 6 메소드와 변수의 스코프

- Method 메소드

    - 자바의 프로그램은 main이라는 이름의 메소드에서부터 시작을 한다.

    - 메소드의 정의 위치는 프로그램에 영향을 미치지 않는다.

 

Chap 7 클래스와 인스턴스

- 클래스 : 데이터 + 메소드  => 인스턴스 변수 + 인스턴스 메소드

    - 클래스를 통해 인스턴스(객체)를 생성해야 해당 변수,메소드를 사용할 수 있다.

- 참조 변수 (Reference Variable) : 만들어진 인스턴스 (new BankAccount() )를 참조할 수 있는 변수 

    - BankAccount myAcnt = new BankAccount();

                         (참조 변수)           (인스턴스)

- 생성자 (Constructor)

    - 인스턴스 생성 과정에서 초기화를 위해 자동으로 호출된다.

    - 생성자의 이름은 클래스의 이름과 동일하다

    - 인스턴스 생성의 마지막 단계는 생성자 호출로 생성자 호출이 생략된 인스턴스는 인스턴스가 아니다.

        - 없는 경우 에러가 나지 않는 이유는 자동적으로 default constructor를 생성해주기 때문이다.

- 이름 규칙

    - 클래스 : 단어 별 대문자

    - 메소드, 변수 : 첫 단어는 소문자 나머지 단어 대문자.

    - 상수 : 모두 대문자, 두 단어 이상이면 underbar

 

Chap 8 패키지

- 이름 충돌

    - 하나의 소스파일에는 public으로 선언된 클래스의 정의를 하나만 둘 수 있다.

    - 소스파일의 이름은 public으로 선언된 클래스의 이름과 동일해야한다.

- 패키지

    - 클래스 접근 방법의 구분

        - 서로 다른 패키지의 두 클래스는 인스턴스 생성 시 사용하는 이름이 다르다.

    - 클래스의 공간적인 구분

        - 서로 다른 패키지의 두 클래스 파일은 저장되는 위치가 다르다.

- import

    - 동일한 이름의 두 클래스를 대상으로 인스턴스를 생성해야 하면 패키지의 이름 생략은 불가피 하다

    - 동일한 이름의 클래스가 사용되지 않는 상황에서 패키지 이름을 생략하는 방법

    - import [패키지 이름].[클래스 이름] => 해당 프로그램에서 [클래스 이름] 이라 하면 [패키지].[클래스]를 의미한다는 것

 

Chap 9 정보 은닉 그리고 캡슐화 (Information Hiding and Encapsulation)

- 정보 은닉의 필요성

    - 인스턴스 변수의 직접적인 접근을 허용하면, 중대한 오류가 발생할 수 있는데 이는 실행 결과에서도 드러나지 않아 큰  문제이다.

- 접근 수준 지시자 (Access-level Modifiers)

    - 클래스 정의 대상

        - public :어디서든 인스턴스 생성 가능, 하나의 소스파일에는 하나의 public class 

        - default (아무것도 적지 않는 경우):동일 패키지로 묶인 클래스 내에서만 인스턴스 생성 가능.

    - 인스턴스 (변수, 메소드) 정의 대상

        - public : 어디서든 접근/호출 가능

        - default (아무것도 적지 않는 경우) : 동일 패키지로 묶인 클래스 내에서만 접근 가능 

        - private : 해당 클래스에 정의된 메소드 내에서의 접근만 허용하겠다.

                - Getter/ Setter => 인스턴스 변수에 직접 접근 할 수 없으므로 해당 인스턴스의 값을 설정/참조 하기 위한 메소드

        - protected : default와 동일하게 동일 패키지로 묶인 클래스 내 + 상속 관계에 있는 다른 클래스 에서 접근 가능

- 캡슐화

    - 하나의 목적을 이루기 위해 관련 있는 모든 것을 하나의 캡슐에 담아두는것

    - 선후 관계 / 포함관계 등을 나타낼 때 용이하다

 

Chap 10 클래스 변수와 클래스 메소드

- 클래스 변수

    - static으로 선언된 변수로 변수가 선언된 클래스의 모든 인스턴스가 공유하는 변수이다.  

    - 클래스 변수는 인스턴스 생성 이전 메모리 공간에 존재한다.

       => 따라서 생성자를 통한 클래스 변수의 초기화 별개로 진행하여야 한다. ex) static int instNum = 100; //선언 + 초기화

- 클래스 메소드

    - 클래스 이름을 통한 클래스 메소드 호출이 가능해진다. ex) [클래스 이름].[메소드 이름]

    - 외부에 기능을 제공하기 위하며 인스턴스 변수의 값을 참조하거나 수정하지 않는 경우 불필요한 인스턴스 생성 과정을 줄일수 있다.

    - 인스턴스 변수에 접근은 불가능 하다 -> 클래스 메소드는 인스턴스 생성 이전부터 접근 가능하다.

- public static void main

    - main 메소드의 호출이 이뤄지는 영역은 클래스 외부로 public 으로 선언

    - 인스턴스가 생성되기 이전에 호출되므로 static으로 선언

Static 초기화 블록

    - 가상 머신이 클래스의 정보를 로딩할 때 실행이 된다.

- Static import

    - 클래스 변수와 클래스 메소드에 대한 import 선언

    - ex) import static java.lang.Math.*; => Math 클래스에 대한 변수와 메소드를 import

'JAVA' 카테고리의 다른 글

[JAVA] 자바 기초 IV  (0) 2022.07.23
[JAVA] 자바 기초 III  (0) 2022.07.22
[JAVA] 자바 기초 II  (0) 2022.07.20