✅ Swing
의 Label
텍스트 바꾸기
1. 문제상황
- swing을 처음 접하다 보니, 텍스트 라벨을 바꾸는 방법을 모르겠음.
2. 문제 분석 및 해결
Swing
의 Label
을 선언 해 준후, 텍스트를 바꾸어주면 된다.
JLabel label = new JLabel("기본 텍스트"); // label 생성
label.setText("새로운 텍스트"); // 텍스트를 변경
-> 클래스를 구분화시키기 위해 여러 클래스를 만들다 보니, Swing
의 Label
을 어떻게 접근할 지 고민했다. 이를 위해서 SwingUI.java
의 속성에다가 private static
으로 선언해서 모든 클래스에 공통으로 해당라벨 (즉, 결과값) 을 선언했다.
public class SwingUI extends JFrame {
public static JFrame frame;
public static JLabel stateLabel;
}
✅ stream
사용방법
stream의 내용은 추후에 따로 포스팅 할 예정이다.
1. 문제 상황
- List 의 값을 하나의 String 값으로 표현하기 위해서 steram 사용을 고려해보았다.
2. 문제 분석 및 해결
String textInput = inputNumberList
.stream()
.reduce("", (s1, s2) -> s1 + s2);
여기서 reduce 라는 애가 궁금할텐데 누적합이라고 생각하면 쉽다.
스트림 요소를 하나의 결과로 줄이는(축소하는) 연산, 즉 스트림의 모든 요소를 하나의 값으로 축소(집계)한다.
T reduce(T identity, BinaryOperator<T> accumulator);
① 매개변수
identity (초기값)
- 연산을 시작할 때 기본으로 사용되는 값.
- 연산이 없는 경우 그대로 반환됨.
- 초기 값이 매우 중요한다!
- 예를 들어 숫자 덧셈이면 0, 곱셈이면 1, 문자열 결합이면 ""가 적절하다.
accumulator (누적 함수)
- 스트림의 각 요소를 하나씩 받아서 연산을 수행하는 함수.
(acc, element) -> newValue
형태로 작성.
② 반환값
- 최종 결과값 (T 타입) -> 제너릭한 함수란 것.
✅ 타입 매개변수 T 선언
1. 문제상황
num01
과 num02
를 T로 선언하게 된다면,
Double result = num01.doubleValue() + num02.doubleValue();
이런식으로 연산해야지 Double
로 형변환이 된다.
그런데 T로 선언하게 되면, 빨간줄로 표시가 된다. 왜 안되는 것일까 ??
2. 문제 분석 및 해결
- 타입 매개변수 T 로 선언하면 ,
doubleValue()
이런식으로 값을 뽑아야하고. - String 값을 바꿀려면
Double.valueOf(textInput);
이렇게 해야한다
✅ Static
과 public
다시 이해하기
1. 문제상황
- static 메서드는 클래스 레벨에서 동작하기 때문에, 특정 인스턴스(this
)에 접근할 수 없다.
2. 문제 분석 및 해결
- 접근제어자는 다른 클래스에서 이 변수 및 메서드에 접근 할 수 있냐 없냐를 결정
- static
은 클래스 단위로 선언된 변수 및 메서드를 다른 클래스와 공유 할거냐 말거냐.
- 그러면 왜 static method
에 인스턴스 변수를 사용하면 안되냐?
=> 해당 인스턴스 변수, 즉 모든 값이 공유되지 않는 객체 별로 하나씩 있는 변수인 멤버변수는! 객체가 생성되었을 때 사용할 수 있는 것임.
=> 그런데 static
은 모든클래스 자체에서 호출된 것. 객체 별로 생성 안 되었을 때도 접근 가능 하다는 것. 그래서 this.num01
가 에러가 뜨는 것
=> ? 그러면 인스턴스 변수가 비어있을 경우.
=> 값이 비어있을 경우에는 해당 메서드에서는 클래스의 멤버변수에 접근할수 없는 것인가. > 객체가 존재하지 않으면 접근할 수 없다는 것이 핵심임.
이런 것과 연관되는 오류로는 값이 없는데 리스트나 동작을 수행 하는 것 > 이 부분이 코드에서도 계속 에러가 뜨는 것 같음.
✅ Setter 로 값 조작하기
튜터님께 개인적으로 질문을 드림.
1. 문제 고민
- Setter를 어떻게 활용할지
2. 문제 분석 및 해결
① 생성자를 만들어서 생성자에 속성 value1
과 value2
를 접어 넣어 계산 하는게 나을지
- 이렇게 될 경우 반복문을 돌 때마다 매번 새로운
new Calculator()
객체를 만들어야함.
② 생성자는 비워두고, setter
를 통해서 속성 value1
과 valu2
에 접근하는게 나을지
- 비어있는 객체가 만들어줌. 그 이후에
set
함수를 통해서 값을 바꾸어주는것이라 두번 동작.
코드에서는 상황에 따라서 해당 동작이 좋을수도 아닐 수도 있다.
다른 사람들이 구글에 코드를 많이 올렸다. 이 코드를 보면서 해당 Setter
를 어떻게 동작했는지 찾아보는 것이 좋을 거 같다하셨다.
-> 찾아보면 확실히 value1
, value2
때문에 새로운 객체를 만든 사람은 없었던 거 같다. ( 애초에 Java class를 여러개 나누지는 않은 거 같다. )
✅ 이진탐색법
- 1부터 100까지 숫자 중 랜덤한 숫자하나 뽑아서 가장 빨리 찾는 알고리즘을 찾는다.
- 처음은 50을 기준으로 50보다 큰지 작은지 판별 후, 그 다음은 25, 12.5 이런식으로 접근한다고 함.
✅ String
의 형변환
1. 문제 고민
- 형 변환 시, 매번 다른 타입들을 변환하다보니, 한 번 정리해주어겠다는 생각을 함.
2. 문제 분석 및 해결
- String
을 Double.valueOf(String)
해주면 Double
이 된다.
- 이와 마찬가지로 Integer.valueOf(String)
을 해주게 될시 Integer
가 된다.
+) Number
의 경우 Integer.valueOf(Number)
는 직접 사용할 수 없음. Number
는 부모 클래스이기 때문에, 직접 Integer.valueOf(Number)
처럼 사용할 수 없다.
- Number
일 경우 Integer.valueOf(Number.intValue())
이런식으로 접근해야함.
- 똑같은 로직으로 Float.valueOf(Number.floatValue())
, Double.valueOf(Number.doubleValue())
, Long.valueOf(Number.longValue())
이런식으로 사용해야한다.
✅ 추가적으로 구현해야 할 부분
- 결과값을 보여줄 때
"num1" + "num2" = "결과값"
> 이런식으로 되어야할 거 같음. 지금은 결과값만 보여지는 중. - 값이 하나 있는 상태에서 "=" 을 두번 누르면 에러가 뜸. > 에러 해결 메시지 달것, 이거 외에도 추가적인 에러 해결해야함.
- C랑 CE 버튼 동작시키기
- < (하나 값 삭제) 버튼 동작시키기.
✅ 오늘의 회고
- 하루종일 레벨 3만 풀었던 거 같다.
- Swing
을 다루고 구현하는데 어려웠던 거 같다.
- 튜터님께 질문을 했을 때, 의아했던 부분이 있다.
- 나는 다른 사람들의 코드를 찾아보지는 않았다. 왜냐? 정답을 보는 느낌이 들었기 때문이다.
- 근데 튜터님은 다른 사람들의 코드를 보면서 이게 좋은 코드인지 아닌지를 지금 당장은 모르더라도 보다보면 그 능력이 올라간다 하셨다.
- Setter
같은 함수도 다른사람들의 함수를 보면서 다른 사람들은 어떻게 value
값을 조정하는지 찾아보는게 좋을 거 같다고 하셔서 이번 기회에 다른 사람 코드를 찾아보았다.
- 아직은 다른 사람들의 코드를 읽는 게 어려워서 자세히 이해는 되지 않았지만, 그래도 어느정도 흐름은 이해가 갔다. 그래서 다른사람들의 코드 흐름을 읽었을 때 주의해서 봤던 부분이 있다.
- 바로 결과값을 저장하는 변수이다. 나는 리스트로 선언했지만, 다른 사람들은 문자열로 선언한 것이 아닌가,, 그래서 나도 문자열로 한번 다뤄보고자 이번에 문자열로 수정했다. 아직까지는 리스트에 비해서는 덜 복잡해진 거 같아서 나쁘지 않은 거 같다.
'백엔드 부트캠프 > TIL' 카테고리의 다른 글
[내일배움캠프Spring-12일차] Enum (1) | 2025.03.05 |
---|---|
[내일배움캠프Spring-11일차] DFS 이해하기 (1) | 2025.03.04 |
[내일배움캠프Spring-9일차] (1) | 2025.02.27 |
[내일배움캠프Spring-8일차] Java 3주차 (1) | 2025.02.26 |
[내일배움캠프Spring-7일차] Java 강의 2주차 수강 (1) | 2025.02.25 |