Java08

ONLY·2022년 11월 2일
0

Java_질의응답

목록 보기
8/14

1. 지역변수와 접근제한자

지역변수는 접근 제한자를 붙여도 어차피 범위가 그 블록 안에서만 사용할 수 있도록 작게 한정되어 있기 때문에 접근제한자를 붙여도 의미가 없다. (매개변수 포함)

2. static 변수

static 키워드를 변수 앞에 붙이면 static 변수 라고 한다.

  • 클래스 변수, 공유 변수(c언어 에서는 static 변수를 정적 변수라고 함)
  • static 키워드가 안 붙어 있으면 인스턴스 변수이다.
    (static 키워드는 함수 앞에 붙일 수 도 있다.)

3. java의 메모리 영역

1) method area

호출된 클래스의 메모리 생성, 그 안에 데이터 멤버 중 static 변수, static함수의 정보값이 들어 있음

2) call stack

메인함수 안에 생성되는 객체(메모리 주소를 가리킴)와 호출되는 함수들

순차적으로 생성 되었다가 사용이 끝나면 사용이 끝나는 순서로(생성된 순서와 반대 순서) 삭제됨

3) heap

객체의 인스턴스 변수와 메소드 정보, static 변수를 포함하고 있는 클래스의 주소 정보

동일한 클래스의 객체이고, static 변수가 있다면 static 변수 정보는 공유

5. 클래스 변수

Math.PI

public static final double PI = 3.14159265358979323846;

값의 공유가 목적이며, 이 값은 변하지 않기 때문에 인스턴스 생성 시마다 각각 인스턴스 별로 이 값을 가지기 위한 메모리 공간을 잡을 필요가 없다. 효율적으로 메모리 공간을 활용하기 위해서는 이런 변수들은 static 선언을 해 줄 필요가 있다.

6. 스태틱 함수와 인스턴스 변수

메모리 생성 시기가 다르기 때문이다

static 함수는 인스턴스 생성이 없어도 클래스가 스캔 되면서 이미 method area에 메모리 방이 만들어 질 수 있다. 인스턴스 변수는 new를 통해서 객체가 만들어져야 변수에 대한 메모리 공간 할당이 가능하다.
static함수는 stiatc 변수를 사용 해야 한다.

반면에 인스턴스 함수는 static, 인스턴스 변수 모두 사용할 수 있는데, static변수가 메모리에 먼저 올라와 있기 때문에(메모리 생성 시기가 빠름) 호출할 수 있는 것이다.

7. 메소드 오버로딩

  • 똑같은 함수 이름으로 매개 변수(파라미터)의 타입과 개수를 달리해서 함수를 만들 수 있는것
  • c언어는 똑같은 함수 이름을 사용하는 것 자체가 안되는데 OOP(object oriented programming)는 같은 함수 이름을 허용
  • 호출된 메소드를 찾을 때 참조하게 되는 두 가지 정보
    : 메소드의 이름 / 메소드의 매개변수 정보

→ 따라서 이 둘 중 하나의 형태가 다른 메소드를 정의하는 것이 가능하다.

(예)

System.out.println("가나다");

System.out.println(1.23);

System.out.println(1.23f);

System.out.println(123L);

System.out.println(123);

System.out.println('a');

System.out.println(1 < 100);

이미 각각의 타입으로 오버로딩 되어서 코딩이 되어 있기 때문에 사용할 수 있는 것.

8. 문제01

가위바위보 게임

주의 Main 에서 다 처리 하지 말고, 
객체 지향적(클래스로 만들어서)으로 짜시오.
===================================
가위, 바위, 보 중 하나를 입력하세요.
가위
바위
졌습니다.
계속하시겠습니까?(Y/N)
y
가위, 바위, 보 중 하나를 입력하세요.
바위
바위
비겼습니다.
계속하시겠습니까?(Y/N)
n
프로그램을 종료합니다.

0개의 댓글