728x90
반응형
SMALL

인스턴스 멤버

구분 설명
인스턴스(Instance)멤버 객체에 소속된 멤버
(객체를 생성해야만 사용할 수 있는 멤버)
정적(static)멤버 클래스에 고정된 멤버
(객체 없이도 사용할 수 있는 멤버)

인스턴스 멤버 선언 및 사용

public class Car{
	//인스턴스 필드 선언
    int gas;
    
    //인스턴스 메소드 선언
    void setSpeed(int speed) { ... }
}
Car myCar = new Car();
myCar.gas =10;
myCar.setSpeed(60);

Car yourCar = new yourCar();
yourCar.gas = 20;
yourCar.setSpeed(80);

=> 외부 클래스에서 사용하기 위해서는 Car객체를 먼저 생성하고 참조 변수로 접근해서 사용해야 한다.

 

this 키워드

: 객체 내부에서 인스턴스 멤버에 접근하기 위해 this사용. 객체는 자기 자신을 'this'라고 한다.

public class Car{
	//필드 선언
	String model;
    int speed;
    
    Car(String model){
    	this.model = model; //매개변수를 필드에 대입.(this 생략 불가)
    }
    
    void setSpeed(int speed){
    	this.speed=speed;
    }
    
    void run(){
    	this.setSpeed(100); //this 생략 가능
        System.out.println(this.model + "가 달립니다. (시속: " + this.speed + ")");
    }
}

 

정적 멤버

정적 멤버란 메소드 영역의 클래스에 고정적으로 위치하는 멤버를 말한다. 객체 생성 없이 바로 사용 가능.

정적 멤버 선언

필드와 메소드는 모두 정적 멤버가 될 수 있음. static 키워드 추가.

public class 클래스 {
	//정적 필드 선언
    static 타입 필드 [= 초기값];
    
    //정적 메소드
    static 리턴타입 메소드(매개변수,...){
    	...
    }
}

 

정적 멤버 사용

클래스 이름과 함께 도트(.) 연산자로 접근한다.

public class Calculator {
	static double pi = 3.141592;
    static int plus(int x, int y){ ... }
    static int minus(int x, int y){ ... }
}

double result1 = 10 * 10 * Calculator.pi;
int result2 = Calculator.plus(10,5);
int result3 = Calculator.minus(10,5);

 

정적 블록

//정적 블록 형태
static {
...
}
public class Television {
	static String company ="MyCompany";
    static String model = "LCD";
    static String info;
    
    static{
    	info = company + "-" + model;
    }
}

public class TElevisionExample {
	pulic static void main(Strings[] args){
    	System.out.println(Television.info);
    }
}

인스턴스 멤버 사용 불가

정적 메소드/블록은 객체가 없어도 실행된다는 특징 때문에 내부에 인스턴스 필드/메소드를 사용할 수 없다.

또한 객체 자신의 참조인 this도 사용 불가.

 

final 필드와 상수

final 필드 선언

final = 최종적. final 필드는 초기값이 저장되면 이것이 최종적인 값이 되어 수정할 수 없다.

final 타입 필드 [=초기값];

* 초기값을 줄 수 있는 방법

1) 필드 선언 시에 초기값 대입

2) 생성자에서 초기값 대입

 

상수 선언

상수는 불변값으로 static이면서 final인 특성을 가져야 한다.

상수 이름은 대문자로 작성하고 단어혼합일 경우 _로 연결한다.

static final 타입 상수;
static{
	상수 = 초기값;
}

static final double PI = 3.14159;
static fianl double EARTH_AREA = 5.147185403;

 

패키지

클래스는 패키지 안에 생성해서 관리한다. 디렉토리만을 의미하지 않으며 클래스의 일부분이다.

패키지 선언

역순으로 쓰며 소문자로 작성한다.

package 상위패키지.하위패키지;

public class 클래스명 {...}
com.samsung.projectname
com.lg.projectname
org.apache.projectname

 

import

다른 패키지에 있는 클래스를 사용하려고 할 때 쓴다.

package com.mycompany;

import com.hankook.Tire;

pubic class Car{
	Tire tire = new Tire();
}

만약 동일한 패키지에포함된 다수의 클래스를 사용해야 한다면 클래스명 대신 *로 표현한다.

import com.hankook.*;
import com.kankook.project.*;

 

접근 제한자

접근 제한자 제한 대상 제한 범위
public 클래스, 필드, 생성자, 메소드 없음
protected 필드, 생성자, 메소드 같은 패키지이거나, 자식 객체만 사용가능
default 클래스, 필드, 생성자, 메소드 같은 패키지
private 필드, 생성자, 메소드 객체 내부

클래스의 접근 제한

클래스는 public과 default 접근 제한을 가질 수 있다.

[public] class 클래스 { ... }

 

생성자의 접근 제한

생성자는 public, default, private 접근 제한을 가질 수 있다.

pubic class ClassName{
	[public | private] ClassName(){...}
}

 

필드와 메소드의 접근 제한

필드와 메소드는 public, default, private 접근 제한을 가질 수 있다.

//필드 선언
[public | private] 타입 필드;

//메소드 선언
[public | private] 리턴타입 메소드(...){...}

 

Getter와 Setter

객체의 필드를 외부에서 마음대로 읽고 변경할 경우 무결성이 깨질 수 있다.

필드를 private 접근 제한을 갖게 하여 외부에서 접근하지 못하도록 하고 get/set 메소드를 이용하게 한다.

private 타입 fieldName;

public 타입 getFieldName(){
	return fieldName;
}

public 타입 setFieldName(타입 fieldName){
	this.fieldName = fieldName;
}

 

싱글톤 패턴

애플리케이션 전체에서 단 한 개의 객체만 생성해서 사용하고 싶다면 싱글톤 패턴을 적용한다.

생성자를 private 접근 제한해서 외부에서 new 연산자로 생성자를 호출할 수 없도록 막는 것이다.

public class 클래스{
	//private 접근 권한을 갖는 정적 필드 선언과 초기화
	private static 클래스 singleton = new 클래스();
    
    //private 접근 권한을 갖는 생성자 선언
    private 클래스(){}
    
    //public 접근 권한을 갖는 정적 메소드 선언
    public static 클래스 getInstance(){
    	return singleton;
    }
}

 

 

728x90
반응형
LIST

'IT > JAVA' 카테고리의 다른 글

[JAVA] #8 인터페이스  (0) 2023.04.14
[JAVA] #7 상속  (0) 2023.04.11
[JAVA] #6 클래스(Class)-1  (0) 2023.04.10
[JAVA] #2 변수와 타입  (0) 2023.04.06
[JAVA] #0 Eclipse 설치 및 환경 구축  (0) 2023.04.06

+ Recent posts