인스턴스 멤버
구분 | 설명 |
인스턴스(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;
}
}
'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 |