728x90
반응형
지역변수
- 선언 시 탄생한다.
- 메소드 실행 종료시 소멸된다.
- 변수 초기화는 수동으로 설정해줘야한다.
- 선언 이후부터 소속 블록 끝까지 유효범위가 설정된다.
필드변수
- 객체 생성시 탄생된다.
- 객체 소멸시 소멸된다.
- 객체 셍상 개수 만큼 생성된다.
- 변수 초기화는 자동으로 설정된다.
- 변수의 유효범위는 객체 내부 전체이고, 한정자(public)에 따라
객체 외부 접근가능하다.
public class Clock_AnalogWriter extends JPanel {
// 필드변수
private final int SIZE;
// JFrame
public Clock_AnalogWriter(){
JFrame frame = new JFrame();
frame.getContentPane().add(this);
frame.setTitle("Clock");
frame.setSize(300, 400);
frame.setVisible(true);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
변수의 유효범위 with JAVA
- 블록( {} ) 단위로 범위가 지정된다.
public class Scope {
public static void main(String[] args) {
// 블록으로 범위가 지정됨
{
int n = 2;
System.out.println(n);
}
double n = 3.14;
System.out.println(n);
}
}
public class Scope {
public static void main(String[] args) {
int n = 2;
System.out.println(n);
// 지역변수 "같은 이름 중복선언 오류"
{
double n = 3.14;
System.out.println(n);
}
}
}
변수의 유효범위 - 지역변수
- 메소드 내에서 선언한 지역변수는 필드변수에 구애받지 않는다.
public class Scope {
// 필드변수
private int n = 3;
public Scope() {
System.out.println(n);
// 지역변수
int n = 333;
System.out.println(n);
}
// main 실행 메소드
public static void main(String[] args) {
new Scope();
}
}
실행결과 - Console
3
333
"지역변수는 필드변수에 구애받지 않고, 지역변수의 유효범위에서 변수의 역할을 임한다는 사실을
위의 코드실행 결과를 통해 알아낼 수 있다."
실습시작 - 아날로그 시계 그리기
import java.awt.Color;
import java.awt.Graphics;
import java.time.LocalTime;
import javax.swing.*;
// View Class
/*
* JPanel 클래스 부모클래스로 상속받
*/
public class Clock_AnalogWriter extends JPanel {
private final int SIZE;
// JFrame
public Clock_AnalogWriter(int n){
SIZE = n;
JFrame frame = new JFrame();
frame.getContentPane().add(this);
frame.setTitle("Clock");
frame.setSize(SIZE + 50, SIZE + 100);
frame.setVisible(true);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public void paintComponent(Graphics g) {
g.setColor(Color.BLUE);
g.drawString("TIME IS GOOD", 105, 50);
g.setColor(Color.LIGHT_GRAY);
g.fillOval(25, 100, SIZE, SIZE);
// 현재 시간
LocalTime time = LocalTime.now();
int radius = SIZE / 2;
int x1 = 25 + radius;
int y1 = 100 + radius;
// 분침 - 1파이에 30분이 속해있음.
radius -= 30;
// draw 메소드는 정수형만 허용한다
double minute_angle = (time.getMinute() - 15) * Math.PI / 30;
int x2 = (int)(x1 + radius * Math.cos(minute_angle));
int y2 = (int)(y1 + radius * Math.sin(minute_angle));
System.out.println("Hello World !");
// 구한 분침좌표를 애플리케이션에 그리기~
g.setColor(Color.RED);
g.drawLine(x1, y1, x2, y2);
// 시침 - 1파이에 6시간이 속해있음.
radius -= 30;
// draw 메소드는 정수형만 허용한다
double hour_angle = (time.getHour() - 3) * Math.PI / 6;
int x2_hour = (int)(x1 + radius * Math.cos(hour_angle));
int y2_hour = (int)(y1 + radius * Math.sin(hour_angle));
// 구한 시침좌표를 애플리케이션에 그리기~
g.setColor(Color.yellow);
g.drawLine(x1, y1, x2_hour, y2_hour);
}
//for test
public static void main(String[] args) {
new Clock_AnalogWriter(750);
}
}
다음의 코드 실행결과는 아래와 같다.
시침의 좌표 값과
분침의 좌표 값을 구해서
자바 애플리케이션에 JPanel 클래스의 drawLine() 메소드를 사용해서 시침, 분침을 그렸다.
아래 코드로 분침 좌표, 시침 좌표를 찾고,
애플리케이션에 분침,시침을 그렸다
// 분침 - 1파이에 30분이 속해있음.
radius -= 30;
// draw 메소드는 정수형만 허용한다
double minute_angle = (time.getMinute() - 15) * Math.PI / 30;
int x2_minute = (int)(x1 + radius * Math.cos(minute_angle));
int y2_minute = (int)(y1 + radius * Math.sin(minute_angle));
System.out.println("Hello World !");
// 구한 분침좌표를 애플리케이션에 그리기~
g.setColor(Color.RED);
g.drawLine(x1, y1, x2_minute, y2_minute);
// 시침 - 1파이에 6시간이 속해있음.
radius -= 30;
// draw 메소드는 정수형만 허용한다
double hour_angle = (time.getHour() - 3) * Math.PI / 6;
int x2_hour = (int)(x1 + radius * Math.cos(hour_angle));
int y2_hour = (int)(y1 + radius * Math.sin(hour_angle));
// 구한 시침좌표를 애플리케이션에 그리기~
g.setColor(Color.yellow);
g.drawLine(x1, y1, x2_hour, y2_hour);
실행되는 애플리케이션에서 선을 그리는 메소드는 애플리케이션을 임의로 닫고, 킬때는 새롭게 다시 메소드를 실행시켜
애플리케이션에 선을 그린다.
이해하기 쉽게 애플리케이션 실행을 통해 알아보자
# 자바 애플리케이션 실행
# 자바 애플리케이션 창 닫고 닫혀진 애플리케이션 재실행
"창닫고, 재실행 결과는 자바 애플리케이션의 시침, 분침이 새롭게 업데이트 된 사실을 볼 수 있다.
그렇기에, 자바 애플리케이션은 창을 닫고 재실행하면, 메소드를 재호출하여 실행한다."
728x90
반응형
'CS 대학강의' 카테고리의 다른 글
[CS 1-2 | 아카데믹 글쓰기] 고정관념, 여러 관점에서의 글쓰는 방법 3주차 (0) | 2022.09.26 |
---|---|
[CS 1-2 | 시스템 프로그래밍 기초] 피연산자와 연산자 7주차 (0) | 2022.09.23 |
프로그램 설계 방법론 - #04 [클래스 상속] (0) | 2022.09.22 |
[CS 1-2 | 오픈소스 SW 기초] 리눅스 CLI 명령어 실습 2주차 (0) | 2022.09.22 |
[CS 1-2 | 이산수학] 증명 5주차 (0) | 2022.09.22 |