Static
static = 정적
* 객체들에 저장되는 게 아니라 클래스 자체에 저장됨 (클래스 전체에 속하는 변수. 하나의 객체에만 속하지 x)
(원래는 각 객체마다 변수에 대해 다른 값을 가지는데, 얘는 하나만 가짐)
-> class의 모든 객체가 정적 변수를 읽고 변경할 수 ㅇ ->클래스명.변수명 이렇게 호출 가능
- object 호출 없이도 접근 가능
- 정의는 class 내에서 함
public static int a; 이런식으로 선언
변수, method 둘다 static 선언 가능
variable
- 선언과 동시에 초기화될 수 ㅇ (먼저 초기화 해주는 것이 좋다)
- 만약 명시적으로 초기화 X -> default value로 자동적으로 초기화
method
public static int myMethod() { } 이렇게 선언
-> 그냥 instance 변수에는 접근 불가, static 변수에만 접근가능 !! (당연)
- static은 객체마다 생기는게 아니라, 클래스 전체에 대해 생기고 적용되는 거임
(non-static ; object별로 생긴다)
- this가 없음 -> 그냥 instance변수에 접근 불가
질문 - public이랑써야함 private이랑 써야함?
*static의 필요성?
일단 가장 필수적인 용도는 main 메서드의 생성.
두 번째 이유는 상수 혹은 클래스 당 하나만 유지하고 있으면 되는 값에 사용할 때.
-> 수학 기능 관련 클래스인 Math 클래스에서 PI 값은 오직 하나이기 때문에 Math.PI가 그 예시 중 하나임 !
또한 순수하게 기능만으로 정의되어 특별히 다른 객체에서 새롭게 정의할 필요가 없는 함수들 역시 static을 사용한다
-> Math 함수에서의 여러 기능들이 그 예시 중 하나입니다.
Main Method
= 프로젝트가 실행될 때 가장 먼저 실행되는 method !
모든 클래스에 main method를 추가할 수 있다
public class Program{
public static void main (String[] args){
~}
}
이런식으로 !
- String args[] = main method의 매개 변수
( 이클립스내의 run->run configurations에서 arguments 입력 가능)
Math Class
= 일반적인 산술에 관련된 함수을 가지고 있다
( static 변수와 static method들을 가지고 있음. ex| PI, e)
- java.lang 패키지에 들어있음 -> 별도의 import문 필요 x
- 일반적인 클래스와 달리 객체를 생성할 필요 X ! ( 안에잇는 method와 variable들이 static 이라서 !! )
(stateless class임. 인스턴스화 할 필요 x. 그리고 모든 변수와 함수는 정적. static)
몇개의 대표적인 method들
• pow
● 난수 생성
1. Math 클래스 이용
Math.random() -> 0.0(이상)~1.0(미만) 에 포함되는 모든 실수 !!
( double num = Math.random(); ) *시드 ??
- 1~100범위에 있는 난수 생성
(int)(Math.random()*100)+1; (0~100미만 +1 -> 1~100)
2. Random Class 이용
import java.util.Random; // import 하기
Random rnd = new Random(); 또는 new Random(seed); // Random 클래스 객체 생성 !!
int ni = rnd.nextInt(10); //0~9 사이의 랜덤 정수값 생성
int nd = rnd.nextDouble(); //0~1 사이의 랜덤 실수값 생성
Wrapper Classes
: 기본 데이터 반환형 타입을 포장하는 클래스
-> 기본형 타입(int, char같은거) 이 객체형으로 사용되어야 할 때 사용 !
( primitive type -> class type )

Boxing
= 기본형을 Wrapper class의 객체로 포장하는 과정 !
하는법
a) 생성자를 사용하여 매개변수로 변수 값을 전달한다 -> Integer obj = new Integer(3); 이런식으로 !
b) 자동으로도 됨 ! -> Integer obj = 3; (자동으로 그냥 벨류가 객체로 바뀜)
Unboxing
= wrapper class의 객체를 기본형으로 해체하는 것
하는법
a) [typename]Value() 함수 이용 -> int i = obj.intValue()
b) 자동 -> int i = obj; (자동으로 객체가 그냥 int 형 벨류로 바뀜)
String 관련
1. 스트링 -> 자료형
각 wrapper 클래스에는 string 형식을 클래스타입으로 변환해주는 parse(type()) 함수가 있다
(각 wrapper 클래스에는 해당 문자열을 해당 자료형으로 바꿔주는 함수가 존재)
ex)
String str="42";
int num = Integer.parseInt(str);
이런식으로
원하는자료형 a = wapperclass.parse자료형(스트링); 해주면 됨
double d = Double.parseDouble(str);
2. 자료형 -> 스트링
wrapper.toString(i) 하면 스트링됨
ex)
String str=Integer.toString(i);
같다?
1. ==
은 두개가 같은 객체인지 확인한다 (레퍼런스가 같은지. 같은 레퍼런스여야 true됨)
- 그냥 int, double같은 자료형들은 값 같으면 그냥 true됨
- wrapper이면 다르게 선언되었으면 false임
2. equals
은 값이 같은지 확인한다
- wrapper일 때 서로 다르게 선언된 다른 객체여도 값이 같으면 true이다. 내용만 확인한다
'2-1 > 객체지향 - java' 카테고리의 다른 글
Chap 7. Inheritance (상속) (0) | 2022.04.12 |
---|---|
Chap 6. Arrays .. (0) | 2022.04.06 |
Chap5-2 (0) | 2022.04.04 |
chap 4. class (0) | 2022.04.02 |
Chap 1,2 (0) | 2022.03.30 |