ㅇTL

chap.5 - static 등등 본문

2-1/객체지향 - java

chap.5 - static 등등

정노르레기 2022. 3. 26. 20:21

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