동현 유
척척석사
동현 유
전체 방문자
오늘
어제
  • 분류 전체보기 (181)
    • BlockChain (48)
      • [paper] Consensus (13)
      • [paper] Execution (19)
      • [paper] Storage (5)
      • [paper] ZKP (1)
      • [paper] Oracle (1)
      • Blockchains (9)
    • Java (19)
      • Java의 정석 (13)
      • Java 파헤치기 (5)
    • Python (20)
      • Python 뜯어보기 (6)
      • 데이터 분석 기초 (5)
      • Python 기초 강의 (6)
      • Python 기초 강의 부록 (3)
    • Golang (0)
    • MySQL (3)
      • programmers (2)
      • 기본 문법 (0)
    • 웹 프로젝트 (IBAS) (36)
      • Django 레거시 (14)
      • SpringBoot api 개편 (14)
      • Infra (3)
      • 서버 장애 기록 (4)
      • 신입팀원 교육 자료 (1)
    • CS (30)
      • Operating System (22)
      • Computer Security (3)
      • Network (4)
      • DBMS (1)
    • 책 (10)
      • 도메인 주도 설계 철저 입문 (9)
      • Real MySQL 8.0 (1)
    • BOJ 문제 풀이 (3)
    • 이러쿵저러쿵 (10)
    • 회고 (1)

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.
동현 유

척척석사

Java/Java의 정석

[Java의 정석] 06. 객체지향 프로그래밍

2022. 3. 8. 20:23
모르는 것만 짧고 빠르게 정리한 노트입니다.

 

 

4.5 가변인자(varargs)와 오버로딩
  • 기존에는 메서드의 매개변수 개수가 고정적이었으나, JDK1.5 부터 동적으로 지정해 줄 수 있게 되었다.
  • '타입... 변수명' 과 같은 형식응로 선언.
  • 매개변수 중에서 가장 마지막에 선언해야 한다. (컴파일러의 매개변수 매핑 로직인듯하다.)
  • 인자가 아예 할당되지 않을 수도 있고, 배열이 포함될 수도 있다. 
public PrintStream(String format, Object... args);

 

 

여러개의 문자열을 타입으로 받는 메서드를 생각해보자.

아래와 같이 두가지 버전으로 작성할 수 있다.

//1st
String concatenate(String... str) {...}

//2nd
String concatenate(String[] str) {...}

매개변수를 배열로 지정해주면, 반드시 파라미터에 인자가 전달되어야 한다.

그래서 빈 값을 전해주려면, 빈 배열이나 null 을 지정해주어야한다는 불편함이 있다.

 

//1st
String result = concatenate(); // ok

//2nd
String result = concatenate(); // compile error
String result1 = concatenate(null);
String result2 = concatenate(new String[0]);

 

 

6.1 변수의 초기화

 - 멤버면수와 배열의 초기화는 선택적이지만, 지역변수의 초기화는 필수적이다.

 - 근데 보통 초기화하는게 안전하다.

 

6.2 명시적 초기화

  : 변수를 선언과 동시에 초기화하는 것. 가장 간단한 방법.

 

6.3 초기화 블럭

  : 클래스 초기화블럭과 인스턴스 초기화 블럭이 있다. 

  : 클래스 블럭은 {} 블럭 앞에 static 만 붙여주면 된다. 클래스가 JVM 에 로드될 때 실행된다.

  : 인스턴스 블럭은 생성자 함수가 실행되기 이전에 먼저 실행된다. 보통 생성자의 공통코드를 뽑아내서 사용한다.

  : 코드의 중복을 줄일 수 있는 방법이다.

Car() {
    count++;
    serialNo = count;
    color = "white";
    gearType = "auto";
}
Car(String color, String gearType) {
    count++;
    serialNo = count;
    this.color = color;
    this.gearType = gearType;
}

위의 코드를 아래처럼 변경할 수 있다.

{
    count++;
    serialNo = count;
}
Car() {
    color = "white";
    gearType = "auto";
}
Car(String color, String gearType) {
    this.color = color;
    this.gearType = gearType;
}

'Java > Java의 정석' 카테고리의 다른 글

[Java의 정석] 7.2 메소드 오버라이딩 시 예외 선언  (0) 2022.03.14
[Java의 정석] 07. 클래스 상속 & 인터페이스 상속  (0) 2022.03.14
[Java의 정석] 05. 배열  (0) 2022.03.05
[Java의 정석] 04. 조건문  (0) 2022.03.05
[Java의 정석] 03. 연산자  (0) 2022.03.05
    동현 유
    동현 유
    Fault Tolerant System Researcher for more Trustful World and Better Lives. (LinkedIn: https://www.linkedin.com/in/donghyeon-ryu-526b8a276/)

    티스토리툴바