ㄴ getter 는 값을 꺼내주는 메서드
ㄴ result : int 에서 resullt 는 변수이고 private 으로 접근을 차단하는 대신 getResult() 제공함
ㄴ 변수 : 타입 => UML 문법
ㄴ 아래 연산을 동시에 하고 싶을 때 인스턴스 변수 이용
ㄴ 2 * 3 + 7 - 2 / 2 = ?
ㄴ 3 - 1 * 7 + 15 / 3 = ?
ㄴ 인스턴스를 여러 개 만들고 싶을 때는 static 필드를 non-static 필드로 변경해줘야 함
ㄴ 여기서 인스턴스는 Calulator 설계도에 따라 생성한 변수들을 말함
ㄴ 여기서 c1 은 레퍼런스이고 이는 Calculator 인스턴스 주소를 받을 변수임
ㄴ static 과 non-static 선택 기준
ㄴ 필드 생성 시 인스턴스를 1개만 만들 것 => static
ㄴ 필드 생성 시 인스턴스를 여러개 만들 것 => static
Test.java
package bitcamp.myapp;
// 소스 코드에서 Calculator 클래스는 bitcamp.util 패키지에 소속된 클래스를 가리킴
// import bitcamp.util.Calculator; // 컴파일러는 import 문장을 바이트 코드로 바꾸지 않음 // 컴파일 시 없어짐
// 메소드 활용 (static 변수를 사용하는 이유)
public class Test {
public static void main(String[] args) {
// 2 * 3 + 7 - 2 / 2 = ?
// => 연산자 우선 순위를 고려하지 않고 앞에서부터 뒤로 순차적으로 계산
int result = 0; // 로컬 변수는 반드시 초기 값을 설정해주어야 함
result = 2 * 3;
result = result + 7;
result = result - 2;
result = result / 2;
System.out.println(result);
}
}
=>
package bitcamp.myapp;
// 소스 코드에서 Calculator 클래스는 bitcamp.util 패키지에 소속된 클래스를 가리킴
// import bitcamp.util.Calculator; // 컴파일러는 import 문장을 바이트 코드로 바꾸지 않음 // 컴파일 시 없어짐
// 메소드 활용 (static 변수를 사용하는 이유)
public class Test {
public static void main(String[] args) {
// 2 * 3 + 7 - 2 / 2 = ?
// => 연산자 우선 순위를 고려하지 않고 앞에서부터 뒤로 순차적으로 계산
init (2);
multiple(3);
plus (7);
minus (2);
divide (2);
System.out.println(result);
}
static int result = 0; //로컬 변수는 반드시 초기값을 설정해줘야함
static void init(int a) { // 초기화
result = a;
}
static int plus(int a, int b) {
return a + b;
}
static int minus(int a, int b) {
return a - b;
}
static int multiple(int a, int b) {
return a * b;
}
static int divide(int a, int b) {
return a / b;
}
}
ㄴ static 메서드 추가하여 활용
ㄴ plus(), minus(), multiple(), divide()
import bitcamp.util.Calculator; // import 는 컴파일하지 않음 => bitcamp.util.Calculator 를 복사하는 역할
// 소스 코드에서 Calculator 클래스는 bitcamp.util 패키지에 소속된 클래스를 가리킨다.
//import bitcamp.util.Calculator; // 컴파일러는 import 문장을 바이트 코드로 바꾸지 않음 // 컴파일 시 없어짐
// 메소드 활용 (static 변수를 사용하는 이유)
public class Test { // 클래스 밖에 변수 선언 불가
public static void main(String[] args) {
// 2 * 3 + 7 - 2 / 2 = ?
// 3 - 1 * 7 + 15 / 3 = ?
// => 위의 계산을 동시에 수행하기
// 두 개의 계산 결과를 저장할 수 있는 result 변수를 준비한다.
// 인스턴스 필드 (new 명령을 통해서만 heap에서만 생성됨)
Calculator c1 = new Calculator(); // 위치 받아서 c1에 저장
Calculator c2 = new Calculator(); // 위치 받아서 c2에 저장
c1.init(2);
c2.init(3);
c1.multiple(3);
c2.minus(1);
c1.plus(7);
c2.multiple(7);
c1.minus(2);
c2.plus(15);
c1.divide(2);
c2.divide(3);
System.out.println(c1.getResult()); // static 을 붙여주니까 제대로 실행됨
System.out.println(c2.getResult()); // static 을 붙여주니까 제대로 실행됨
}
}
ㄴ 두 연산 동시 계산
변화 과정
ㄴ result 를 static 변수로 바꿔줘야 함
ㄴ 선택한 부분을 Calculator 라는 클래스로 이동시킴
Calculator.java
// 여러 곳에서 사용할 클래스라면 패키지 멤버로 만드는 것이 유지보수에 좋다.
// => 패키지 멤버 클래스
public class Calculator {
static int result = 0;
static void init(int a) {
result = a;
}
static void plus(int value) {
result += value;
}
static void minus(int value) {
result -= value;
}
static void multiple(int value) {
result *= value;
}
static void divide(int value) {
result /= value;
}
}
=>
// 여러 곳에서 사용할 클래스라면 패키지 멤버로 만드는 것이 유지보수에 좋다.
// => 패키지 멤버 클래스
class Calculator {
int result = 0;
void plus(int value) {
this.result += value;
}
void minus(int value) {
this.result -= value;
}
void multiple(int value) {
this.result *= value;
}
void divide(int value) {
this.result /= value;
}
// 인스턴스를 사용하지 않는 메서드라면 그냥 클래스 메서드로 두어라.
static int abs(int value) {
return value >= 0 ? value : value * -1;
}
}
Test.java
Calculator.java
Test.java
ㄴ Calculator 클래스에 static 추가
ㄴ 값을 임의로 넣어버릴 수 있는 문제가 있어서 result 값은 private 으로 접근 제한을 해줘야 함
=> result 를 직접 접근하지 않는 것이 좋음
Calculator.java
Test.java
ㄴ getResult() 라는 메서드를 Calculator 클래스에 추가하여 사용할 것
Calculator.java
ㄴ getResult() 라는 메서드를 Calculator 클래스에 추가
ㄴ getResult() 를 private 으로 설정하면 Test.java 에서 사용할 수 없으므로 public 으로 설정하자
Test.java
ㄴ 두 가지 연산을 하기 위함
ㄴ Calculator c1 = new Calculator, Calculator c2 = new Calculator() 를 이용해 인스턴스 생성
Calculator.java
ㄴ getResult 를 이용해 인스턴스를 받아오도록 함
ㄴ 어느 인스턴스를 쓸 것인지를 받아오도록 하고, 해당 인스턴스의 result 값을 받아옴
Test.java
ㄴ 어느 인스턴스를 넘겨줄 지와 넘겨줄 result 값을 넣어주기
ㄴ 두 연산 동시에 실행하기 위해 위처럼 변경
Calculator.java
ㄴ static 제거
Test.java
Calculator.java
ㄴ static 제거한 경우 인스턴스를 여러 개 만들 수 있음
=> new 명령 통해서 result 라는 이름을 가진 변수를 만들기 (result = 인스턴스)
ㄴ 인스턴스 Calculator 설계도에 따라 생성한 변수들
ㄴ 인스턴스 별로 독자적으로 관리 가능
ㄴ 어떤 인스턴스의 변수인지 알기 위해 this 필요
=> 인스턴스의 this 는 컴파일러가 자동으로 만드는 로컬변수
ㄴ this 를 생략하면 컴파일러가 붙여주긴 하지만 this 를 생략하지 말자
ㄴ 인스턴스의 this 에는 주소가 들어감
ㄴ non-satic => this 라는 로컬변수가 존재
ㄴ satic => this 라는 로컬변수가 존재하지 않음
=> 클래스 파일 확인
ㄴ result2 라는 static 변수를 추가하고 차이를 확실하게 보기 위해 geResult() 에도 값 넣어주기
ㄴ Calculator 에 있는 this 는 외부에서 넘겨준 인스턴스 주소를 저장함
ㄴ 클래스 파일 열어서 확인
ㄴ getResult() 에서는 this 의 존재를 확인할 수 있음
'네이버클라우드 > JAVA 웹 프로그래밍' 카테고리의 다른 글
JAVA 14일차 (2023-06-12) 자바 기초 DAY12_Eclipse 설치 및 설정 (0) | 2023.06.12 |
---|---|
JAVA 13일차 (2023-06-09) 자바 기초 DAY11_국영수 성적 테스트 만들기 (0) | 2023.06.09 |
JAVA 12일차 (2023-06-08) 자바 기초 DAY10_개인 프로젝트 - 마트 물품 관리 시스템 (0) | 2023.06.08 |
JAVA 12일차 (2023-06-08) 자바 기초 DAY10 (0) | 2023.06.08 |
JAVA 11일차 (2023-06-07) 자바 기초 DAY9_개인프로젝트 - 마트 물품 관리 시스템 (0) | 2023.06.07 |