[Java] 클래스
<정적 멤버>
클래스 안에는 있지만 객체에는 없는 멤버
메소드 영역의 클래스에 고정적으로 위치하는 멤버
모두 공통되게 들어가는 데이터라 고정해놓는다.
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사용하는 방법 설명.