개발/Java

[Java] 클래스

yun000 2024. 12. 3. 17:36

<정적 멤버>

클래스 안에는 있지만 객체에는 없는 멤버

메소드 영역의 클래스에 고정적으로 위치하는 멤버

모두 공통되게 들어가는 데이터라 고정해놓는다.

static 타입 필드명;
static 리턴타입 메소드명(){}

<인스턴스 멤버>

모든 객체에 각각 들어있는 멤버

<인스턴스 멤버 vs 정적 멤버>

인스턴스 멤버는 객체 참조변수 통해서만 값을 참조하고 쓴다.

Calculator calc1=new Calculator("black",1000);
System.out.println(calc1.circleArea(10));

 

정적 멤버는 객체로 갈 필요없다. 클래스에서 값을 읽으면 된다.

System.out.println(Calculator.circleArea2(20));

 

정적 메소드 안에 인스턴트 멤버를 사용하려고 하면 에러난다.

인스턴스 멤버는 인스턴스 메소드에서만 쓸 수 있다.

예를들어

package ch06.sec09_sec10;

public class Calculator 
{
	//instance field
	String color;
	int price;
	//static field
	static String company;
	static double pi=3.14159;
	
	//instance method
	Calculator(String color, int price)
	{
		this.color=color;
		this.price=price;
	}
	
	double circleArea(double radius)
	{
		System.out.println(this.color);//possible!!!!!!
		return radius*radius*Calculator.pi;
	}
	
	//static method
	static double circleArea2(double radius)
	{
		System.out.println(this.color);//Error!!!!!!!
		return radius*radius*pi;
	}
}
정적 멤버(class 변수) 클래스에서 선언 객체들이 공유하는 변수. 공통으로 사용된다. static int v1=10;
instance 멤버 클래스에서 선언 정적멤버가 아닌 변수들. 객체마다 다른 값 저장.
지역 변수 메서드에서 선언 메서드 내에서 선언 후 메서드 종료시 같이 파괴되는 변수
매개변수 메서드에서 선언 메서드 호출시 값을 전달하는 인수

<final 필드>

final는 초기값이 저장된 후에는 수정할 수 없다.

아래에 NATION은 상수이다.(불변하는 값)

package ch06.sec11.exam01;

public class Korean 
{
	static final String NATION="대한민국";
	final String ssn;
	
	String name;
	
	public Korean(String ssn,String name)
	{
		this.ssn=ssn;
		this.name=name;
	}
}

<패키지>

루트 패키지는 애플리케이션 식별 목적으로 쓰이고 

패키지는 클래스 식별하는 용도로 쓰인다.

import 

다른 패키지에 있는 클래스 사용할때 사용

import com.hankook.Tire;

<접근 제한자>

=캡슐화를 구현. 클래스 접근 제한

pulic = class,field,constructor, method에 사용. 전부 공개

protected = 같은 패키지나 자식 객체만 사용 가능

default = 같은 패키지안에서 사용가능

private = 객체 내부. 클래스 안에서만 가능

<Getter Setter>

객체 무결성 유지를 위해

직접적인 외부에서의 필드 접근 막고

메소드 통해 필드에 접근하게 한다.

Setter - 외부에서 들어오는 값을 확인하고 올바른 값을 넣기

Getter - 필드의 값을 일부분만 가공처리하여 공개

 

예시)

Setter - age값이 음수인 것은 말이 안된다. 이를 막고 정상적인 값만 저장되게 한다.

Getter - 필드 값 일부만 노출시키고 싶을 때 사용한다. 예를 들어 주민등록번호 앞 6자리만 보이기

package ch06.sec14;

public class Member 
{
	private int age;
	
	//getter
	public int getAge() 
	{
		return age;
	}
	
	//setter
	public void setAge(int age)
	{
		if(age<0) {this.age=0;}
		else if(age>1000) {age=100;}
		else {this.age=age;}
	}
}

+) 이름이 isAult처럼 is로 시작하는 함수는 반환값이 boolean이다.

+) Source --> Generate Getters and Setters 누르면 자동으로 getter setter를 만들어준다.

<API vs Library vs framework>

API=서로 다른 프로그램끼리 소통하기 위한 프로그램. 실제 동작하는 interface

Library= 자주 사용하는 코드 집합

Framework= 개발에 사용되는 구조, 규칙

 

+) API document=API사용하는 방법 설명.