본문 바로가기

JAVA/JAVA 기초

자바 기초 작성법

반응형

생성자


인스턴스를 생성하는 시점에 설정을 읽어들이거나 필드를 초기화하는 등 여러가지 처리를 하는 경우 '생성자'를 선언한다.

생성자는 인스턴스를 생성할 때 호출되는 처리다.


package com.eeswk.domain;


public class Student {

String name;

int score;

static final int MAX_SCORE = 100;

public Student(String name, int score) {

this.name = name;

this.score = score;

}

public Student(String name) {

this(name, 0);

}

void printScore() {

System.out.println(this.name + "의 점수는 " + this.score +"점 (" +MAX_SCORE +"점)");

}

public static void main(String... args) {

Student eunyoo = new Student("은유");

eunyoo.score = 90;

eunyoo.printScore();

Student yelim = new Student("예림", 80);

yelim.printScore();

}

}



생성자에서도 일반 메서드와 동일하게 오버로딩이 가능하다.

인수가 다른 생성자를 여러개 정의할 수 있다.


this(name, 0)은 Student(String name, int score) 생성자를 호출하는 기술이다.

Student(String name) 생성자 안에서 직접 초기화 처리를 작성할 수 있지만, 여러 생성자 안에 비슷한 코드를 몇번이고 작성하는 것은 유지보수성에 나쁜 영향을 준다.

코드를 공통화할 수 있는 경우 가장 인수가 많은 생성자에 필요한 처리를 기술하고 인수가 적은 생성자에서는 this를 사용하여 별도의 생성자를 ㄹ호추하는 식으로 하는 것이 좋다.




수식자

public, static 클래스나 메서드 필드에 대해 효과나 제약을 부여하는 수단으로 '수식자'


접근제한자 / 클래스나 메서드, 필드등에 대해 어떤 스코프에서의 액세스를 허가 할지를 지정

abstract / 클래스나 인터페이스, 메서드가 추상적인 것임을 지정

static / 클래스가 인스턴스화되지 않아도 멤버에 액세스 할수 있음 지정

final / 멤버의 변경을 금지하는 지정 (지정하는 대상에 따라 금지의 의미가 다름)

transient / 객체의 직렬화 시에 직렬화 대상에서 제외한다.

volatile / 멀티 스레드로부터 액세스 되는 필드가 스레드마다 캐시되지 않도록 한다.

syncronized / 동기처리(동시에 1 스레드만)를 실행할 수 있도록 지정

native / C/C++등 자바 이외의 네이티브한 코드를 호출한다는 것을 지정

strictfp / 부동소수점를 IEEE 754 규격으로 엄밀히 처리하는 것을 지정



final 수식자

필드에 지정 -> 그 필드의 값이 변경되는 것을 금지

메서드에 지정 -> 서브 클래스에서의 메서드 변경을 금지(오버라이드를 금지한다는 의미)

클래스에 지정 -> 클래스의 서브 클래스화를 금지 (지정한 클래스를 계승하여 서비클래스를 만드는 것을 금지)


메서드 변경이란

어떤 클래스를 계승해서 만든 서브 클래스 중에서 부모 클래스가 지난 메서드를 서브 클래스쪽에서 변경하는 것(오버라이드)



transient 수식자

객체의 직렬화 시에 해당 필드를 직렬화의 대상에서 제외하겠다는 지정이다.

직렬화란 인스턴스화되어 있는 자바 객체를 바이트 열로 변환하는 것을 말한다.

예) 데이터를 필드에 보관하거나, 네트워크 간에 객체를 송수신하거나 할 때 객체의 일시적인 데이터를 보관하는 필드를 갖게 하는 경우가 있는데, 그러한 데이터는 파일을 보관할 때는 불필요하다.

그런 필드에 대해 transient 수식자를 지정함으로써 불필요한 일시적인 데이터를 직렬화 하지 않도록 하게 해준다.


volatile 수식자

멀티 스레드로부터 액세스되는 필드에 대해 스레드마다 값이 캐시되지 않도록 하는 지정

멀티 스레드에서 동일 객체를 참조할 경우 아주 짧은 타이밍에 스레드마다 참조하는 값이 달라지는 일이 있는데 그것을 volatile 수식자로 방지할 수 있다.


synchronized 수식자

대상의 처리를 동기화하기 위한 지정

메서드 또는 블록에 대해 지정할수 있다.

지정한 메서드 또는 블록의 내부는 동시에 하나의 스레드에서만 액세스할 수 있음을 보증한다.

멀티 스레드 프로그램에서는 처리의 순서 등이 기대하지 않는 상태가 되지 않도록 해준다.


native 수식자

지정한 메서드가 네이트브한 코드(C/C++ 등으로 만들어진 DLL이나 공유라이브러리 등)를 호출한다는 것을 나타낸다.

지정한 메서드는 자바소스 코드상에서 내용을 정의할 수 없다.


strictfp 수식자

부동소수점 수를 IEEE 754 규격으로 엄밀하게 관리한다는 지정이다.

인터페이스 또는 메서드에 대해 지정할 경우 그 클래스, 인터페이스, 메서드의 안에 있는 모든 double, float필드/변수의 부동소수 연산이 IEEE 754에서 지정된 규칙으로 엄밀하게 실시하게 된다.

double, float를 사용한 부동소수 연산을 실시하는 프로그램에서 복수의 플랫폼 간에 엄밀한 이식성을 요구하는 경우에 지정하곤 한다.



애노테이션(annotation)

소스 코드 안의 요소(클래스나 메서드 등)에 대해 정보(메타 데이터)를 설명하는 매커니즘이다.

클래스나 메서드에 특정 역할 및 의미를 갖게 하는데 사용할 수 있다.

- 메서드의 오버라이드를 나타내는 @Override

- 비추천을 나타내는 @Deprecated

- 경고를 출력하지 않도록 하는 @SuppressWarnings


public class Person {

private String name;

@Override

public String toString() {

return name;

}

@Deprecated

public String get_name() {

return name;

}

public String getName() {

return name;

}

}



@Deprecated 애노테이션을 부여하여 호환성을 유지하도록 한다.

비추천임을 이용자에게 알릴 수 있다.


@SuppressWarnings 코드안에 억제하고 싶은 경고의 종류를 지정하여 컴파일 시에 경고를 출력하지 않도록 한다.

경고의 냉ㅇ의 무시하게 되어 여러 문제점을 야기하기 때문에 사용을 권장하지 않는다.



명명 규칙

클래스와 변수는 카멜케이스로

숭수는 스네이트케이스


클래스명 -> 대문자로 시작하는 카멜케이스

변수 -> 소문자로 시작하는 카멜케이스


public class Result{

public static final int STATUS_OK = 0;


private int number;


private String name;

}


변수는 명사

메서드는 동사


private boolean isStarted = false; //안좋음


private boolean started = false;


publc boolean isStarted() {

return this.started;

}



XxxInfo

XxxData

XxxManager


새로운 데이터나 처리가 필요한 경우 뭐든지 포용할수 있어서 비대화될 가능성이 높은 이름이다.


출처: 자바 마스터북



반응형

'JAVA > JAVA 기초' 카테고리의 다른 글

예외 관련  (0) 2018.10.21
자바 컬렉션관련  (0) 2018.10.13
자바 배열관련  (0) 2018.10.13
자바 타입관련  (0) 2018.10.13
자바 기본형 참조형 클래스 관련  (0) 2018.10.12