본문 바로가기

Developer/Java8

2장 객체지향 프로그래밍

 

 

2.2 클래스 구현하기

 

2.2.1 인스턴스 변수

 

private Int rownum;

private String delYn;

 

자바에서는 인스턴스 변수를 보통 private 선언한다.

인스턴스 변수를 private으로 선언하면 같은 클래스에서만 변수에 접근이 가능하다.

 

2.2.2 메서드 선언부

 

메서드를 선언할 때는 메서드 이름, 파라미터 타입, 반환 타입을 선언한다.

 

 public void raiseSalary(Double byPercent)

 접근제어자

 public

 누구든지 해당 메서드를 호출할 수 있음

 반환 타입

 void

 반환할 값 없음

 메서드 이름

 raiseSalary

 메서드이름

 파라미터 타입

 (Double byPercent)

 double타입 파라미터를 받음

 

2.2.3 메서드 구현부

 

메서드에서 값을 돌려줄 때는 return을 사용하여 돌려준다.

 

public class Employee {

private String name;

private double salary;

 

public void raiseSalary(double byPercent) {

double raise = salary * byPercent / 100;

salary += raise;

}

 

public String getName() {

return name;

}

}

 

 

2.2.4 인스턴스 메서드 호출

 

raiseSalary(5);

 

public void raiseSalary( 5 ) {

double raise = 5 * byPercent / 100;

5 += raise;

}

 

자바에서 static으로 선언하지 않은 메서드는 모두 인스턴스 메서드이다.

 

■ 인스턴스 메서드

 > 인스턴스 생성 후, '참조변수.메서드명()'으로 호출

 > 메서드 내에서 인스턴스 변수 사용 가능

 

■ 클래스 메서드

 > 객체생성 없이 '클래스명.메서드명()' 으로 호출

 > 메서드 내에서 인스턴스 변수 사용 불가

 

2.2.5 this 참조

 

객체에 있는 메서드를 호출할 때는 해당 객체를 this로 접근할 수 있다.

 

public void raiseSalary(double byPercent) {

double raise = this.salary * byPercent / 100;

}

 

흔히 파라미터 변수를 다른이름으로 사용하고 싶지 않을 때 this를 사용한다.

 

public void setSalary(double salary) {

this.salary = salary;

}

 

salary = 지역변수

salary = 인스턴스 변수

 

2.2.6 값을 이용한 호출

 

public void insertValue(Device device) {

String devName = device.getDeviceName();

}

 

 

 

 

 

2.3 객체생성

 

2.3.1 생성자 구현하기

 

public Employee (String name, double salary) {

this.name = name;

this.salary = salary;

 

생성자 선언은 메서드 선언과 미슷하다.

그러나 생성자는 이름이 클래스 이름과 같고 반환타입이 없다.

 

2.3.2 오버로딩

 

생성자는 두 가지 이상의 다른 버전으로 제공할 수 있다.

 

public Employee(double salary) {

this.name = "jason";

this.salary = salary;

}

 

오버로딩 사용에는 다음 조건 중 하나만 만족해도 사용이 가능하다.

 1) 매개변수 타입이 달라야 한다.

 2) 매개변수 갯수가 달라야 한다.

 

2.3.4 기본 초기화

 

생성자 안에서 인스턴스 변수를 명시적으로 설정하지 않으면 자동으로 기본값으로 설정된다.

(숫자 0, 불 false, 객체 참조 null)

 

public Employee(String name) {

// salary는 자동으로 0으로 설정된다.

this.name = name;

}

 

2.3.6 최종 인스턴스 변수

 

인스턴스 변수를 최종으로 선언할 수 있다.

초기화한 변수는 다시 수정할 수 없다.

 

private final String name;

 

2.3.7 인자 없는 생성자

 

클래스에 성성자가 없으면 자동으로 인자 없는 생성자가 생성된다.

모든 인스턴스 변수는 명시적인 초기화 없이 기본값으로 남는다.

따라서 모든 클래스에는 생성자가 적어도 하나는 있다.

 

 

 

 

 

2.4 정적변수와 정적 메서드

2.4.1 정적 변수

 

형태: static int count;

 

 

public class Counter {

int count = 0;

 

Counter() {

this.count ++ ;

System.out.println(this.count);

}

 

public static void main(String[] args) {

Counter c1 = new Counter();

Counter c2 = new Counter();

}

}

 

 

결과-------------

1

1

-----------------

 

public class Counter {

static int count = 0;

 

Counter() {

this.count ++ ;

System.out.println(this.count);

}

 

public static void main(String[] args) {

Counter c1 = new Counter();

Counter c2 = new Counter();

}

}

결과-------------

1

2

-----------------

 

변수에 static 즉 정적변수로 지정할 경우 정적변수 값이 공유가 되어 증가된 값이 출력되는 결과를 볼 수 있다.

 

2.4.2 정적 상수

 

형태: public static final double PI = 3.1459265358979;

 

2.4.3 정적 초기화 블록

 

2.4.4 정적 메서드

 

정적메서드는 객체에 동작하지 않으므로 인스턴스변수에 접근할 수 없다.

대신에 자신이 속한 클래스의 정적 변수에는 접근이 가능하다.

 

2.4.5 팩토리 메서드

 

 

 

 

 

 

 

2.5 패키지