2장. 객체 생성과 파괴

  • 새로운 객체 생성

    • 생성자 대신 static method는 유연성을 줌 → 바깥 인스턴스에 접근할 일이 없다면 무조건 static을 붙여서 정적 멤버 클래스로

    • 생성자에 매개변수가 많다면 빌더 이용

    • 싱글턴 보장 & 재활용 : 최초 한 번만 메모리를 할당(static) → 생성자가 private으로 객체 1개 재사용

    • private 생성자로 인스턴스화 막을 수 있음

    • 의존 객체 주입 사용 → util 클래스(static으로만 구성) 구현을 여러 가지로 사용

      → 팩토리 메서드로 주는게 좋음

    • 완료된 객체 참조는 해체 (≠ null)

    • 예외가 발생하면 제대로 종료하기 위해 try-with-resources 사용 → 암묵적으로 자원 반납

      (자바의 객체 소멸자인 finalizer, cleaner : 예측x, 위험, 불필요)

      종료할 자원 담는 객체 클래스에서 AutoCloseable 구현 후, 다 쓰고 close 메서드 호출

        public class SampleResource implements AutoCloseable {
            @Override
            public void close() throws RuntimeException {
                System.out.println("close");
            }
      
            public void hello() {
                System.out.println("hello");
            }
        }
      
        public class SampleRunner {
            public static void main(String[] args) {
                try (SampleResource resource = new SampleResource()) {
                    resource.hello(); // 리소스 사용
                } // try 블록이 끝날 때, close를 호출
            }
        }
  • 추가
    • 인스턴스화 막는 이유 : 정적 필드와 정적 메소드만으로 구성된 클래스를 만드는 경우 → 객체마다 같은 속성값을 가짐
    • 함수형 인터페이스 : “1개” 추상 메소드 가짐 (@FunctionalInterface 검증용)

참조

'Spring > Java' 카테고리의 다른 글

[JAVA] 프로그램  (0) 2023.03.10
[JAVA] 프로그래밍 언어, java  (0) 2023.03.10

자바 프로그램 구조

  • class(객체 설계도) > 메소드(이름, 파라미터, 리턴) > 문장 ;
    • 접근제어자(public) ~정적메소드(static) 리턴값(void) 이름(main) (매개변수 …) {~}
    • 자바에서는 리턴값 항상 명시
  • class 안에낸 클래스 이름과 동일한 class가 존재해야함
  • 주석문 : 코드 설명
    • /* ~ */
    • // 한줄만 무시
    • /** */ ⇒ 라이브러리로 api 문서로 만들 수 있음
  • 코드 블럭 : { } 내부, 코드블록 내 코드블록 존재하기도
    • 블럭 내 선언은 블럭외에서 사용x
  • java 프로그램은 main()부터 실행
  • 식별자 identifier
    • @#!(X) _$(O) ↔ 예약
    • 대소문자 구분 / true, false / null / 카멜 표기법
    • 숫자로 시작, 예약어, 특수문자 (x)
  • 클래스 이름 : 대문자로 시작
  • 상수 : final 모든 문자 대문자
  • 변수(초기화 필요) ↔ 클래스 멤버변수는 자동 초기화
  • 메소드 이름 : 카멜 표기법
    • int count ⇒ iCount로 타입 알 수 있게 표현하기도
    • public int iGetAge() {}

java 자료형 : 기초형 + 참조형(Class, interfaace, array, String)

  • boolean : default가 false & 논리 타입 ↔ 정수 사이 타입 변환 X
  • char : 2byte = W/u0000 unicode
  • byte, short, int, long(끝에 l/L) : byte, short는 사칙연산시 int로 변경
  • float : 끝에 반드시 f/F, double 선

진수 - 2 : 0b / 8 : 016 ~ / 16 : 0xe

지수 : E-3 = * 1000

형변환

  1. 자동으로 큰 타입
    • 피연산자 중 하나가 큰 경우, 그쪽으로
  2. 강제형 변환 → 데이터 손실 = 앞부분(뒤부터 들어감)
  • int/byte → 소수 잘려서 나옴
  • (char)0x12340041 → A(0041)

연산

산술연산

        • /(몫) %(나머지)
  • ++X, —X : 연산 후 코드 진행
  • X++, X— : 코드 후 연산

비교 연산자 <>, < =, > =, == → true/false

로직 연산자 : && and, || or, !, ^

비트 연산자 : & | ^ !

비트 shift 연산

  • a>>b a를 b번(최상위 비트로 채움
  • a>>>b : 빈 내용을 0채움
  • a<<b 빈자리 모두 0

3개의 피연산자 : (~)? 0:1

우선순위

대입 ++ +- (산술) (비트) (논리) (조건)


출력 스트림

  • 표준 : println, print
  • printf : %%(%출력) \n, %d(정수), %f(실수), %c, %s(문자열)

입력 스트림

  • System.in 키 입력 → InputStreamReader
  • 키보드 입력 받기
    • import java.util.*;
    • new Scanner(System.in);
    • sc.nextLine(); sc.next() 문자 / sc.nextInt() 숫자
    • sc에서 tab, \n 모두 동일하게 처리함

기본형의Wrapper클래스 : parseXX() 문자열을 값으로 변환

  • Integer.parseInt()
  • Double.parseDouble()

'Spring > Java' 카테고리의 다른 글

[effective java] 2. 객체 생성과 파괴  (0) 2023.08.29
[JAVA] 프로그래밍 언어, java  (0) 2023.03.10

자바 특징

  • WORA(Write Once Run Anywhere) : 한번 작성하면 어디서든 동작
  • ← 2가지 이유 : 바이트코드, JVM에서 자바 바이트 코드를 실행
  • 플랫폼 독립성 : VM 때문(vm 자체는 플랫폼에 종속)
  • 컴파일러 : java → byte 코드(VM이 아는 목적 코드) ↔ c → object 파일
    ↔ c언어는 추가로 링커 사용 : 목적코드와 라이브러리 연결

바이트 코드

  • 자바 VM이 인터프리터 방식(명령어 단위)으로 해석

자바 플랫폼 용어 & 사용

jvm < api < jre < jdk

  • jdk 자바 응용 개발 환경, 개발에 필요한 도구 포함
  • Java SE : 표준 배포판 / Java EE : 기업용 / Jave ME : 자바 마이크로 배포판 / Java FX : gui에 사용

'Spring > Java' 카테고리의 다른 글

[effective java] 2. 객체 생성과 파괴  (0) 2023.08.29
[JAVA] 프로그램  (0) 2023.03.10

+ Recent posts