'Programming Language'에 해당되는 글 4건
엑셀의 경우, 변경 사항이 발생 하거나 또는 파일 저장 할 때 마다 수식에서 계산되는 값이 갱신 되는데
만약, 수식을 여러 개 설정 한 경우 + 데이터가 많은 경우, 매우 오래 걸려서 작업 속도가 떨어진다.
수식 값 갱신을 수동 처리를 통해서 위와 같은 불편함을 해소 할 수 있다.
* 방법
메뉴 > 수식 > 계산옵션 > 자동->수동으로 변경
모든 작업 후 지금 계산 Icon 클릭 (또는 키보드에서 F9 입력) 하면, 수동으로 수식 값이 갱신 된다!
Excel 2013 기준 화면이며, 버전에 따라서 해당 메뉴의 위치가 다를 수 있습니다.
java.lang.NoSuchMethodError 오류메시지는 해당 메서드를 찾지 못할 때 발생된다.
본인의 경우는 라이브러리 중 하나의 메소드를 수정한 뒤 test 문제없음을 확인하고
수정된 라이브러리만 운영(production)환경으로 반영했다.
그런데, 해당 라이브러리를 사용하는 타 class에서 java.lang.NoSuchMethodError 오류메시지 발생되었는데
Error 발생된 class file도 아무 수정없이 complie해서 운영(production)환경에 반영하니 문제가 사라졌다.
▶ 발생분석
* 현상 오류메시지 예시
java.lang.NoSuchMethodError: biz.com.dao.member.updateUser(Lbiz/com/vo/User;)V
- 해석
biz/com/vo/User 객체 1개를 파라미터로 받고 반환 값은 없는 biz.com.dao.member.updateUser라는 메서드를 찾지 못했다는 의미
* 소스코드 분석
Error가 발생된 (라이브러리를 사용하는)애플리케이션 코드 수정은 없었으며 라이브러리는 integer값을 반환 되도록 변경되었다.
- 라이브러리를 사용하는 애플리케이션 코드
// UserService.java
...
public void change(User user) {
...
member.update(user);
}
- 변경 전 후 라이브러리 소스코드
// Member.java - 변경 후
public int updateUser(User user) {
return member.update(user);
}
// Member.java - 변경 전
public void updateUser(User user) {
member.update(user);
}
▶ 발생예시 분석
라이브러리를 사용하는 애플리케이션 코드를 새로운 라이브러리로 다시 컴파일하지 않았기 때문이다.
라이브러리를 사용하는 애플리케이션 코드는 이전 라이브러리로 컴파일되었으므로,
반환값이 없는 메서드를 호출하도록 class 파일에 기록되어 있지만,
새로 변경된 라이브러리에서 반환값이 없는 메서드는 없어지고, integer값을 반환하는 메소드만 존재하기 때문이다.
▶ 결과
Java는 바이트코드를 이용해서 배포되며, 바이트코드는 자바 컴파일러에 의해 작성된다.
라이브러리가 변경 되었다면 이를 사용하는 어플리케이션 바이트코드도 다음과 같이 변경되어져야 하므로
어플리케이션 코드도 함께 반영되어져야한다.
biz.com.dao.member.updateUser(Lbiz/com/vo/User;)V -> biz.com.dao.member.updateUser(Lbiz/com/vo/User;)I
▶ 참고문헌
'Programming Language > Java' 카테고리의 다른 글
[도서리뷰]JAVA PERFORMANCE FUNDAMENTAL (0) | 2017.04.07 |
---|---|
Java primitive type, wrapper class and autoboxing (0) | 2016.12.08 |
Java 개발자로써 Java Language가 어떻게 Running 되는 지에 대한 호기심과 좀 더 나은 개발자가 되고픈 욕심으로써 작성된 도서 리뷰입니다.
* 도서정보
http://www.kyobobook.co.kr/product/detailViewKor.laf?barcode=9788995765371
'Programming Language > Java' 카테고리의 다른 글
[Java] java.lang.NoSuchMethodError 오류분석 (0) | 2017.04.07 |
---|---|
Java primitive type, wrapper class and autoboxing (0) | 2016.12.08 |
※ Java Primitive Type, Wrapper Class and Auto-Boxing
▶ primitive type 이란?
JAVA에서 사용되는 8가지 기초자료형을 말한다.
method의 parameter 전달시 기초 자료형은 값 참조(call by value)로 이루어진다.
8가지 기초자료형는 다음과 같다.
Variable Type |
Default Value |
단위(bits) |
boolean | false | 1 |
byte |
(byte)0 |
8(=1byte) |
short |
(short)0 |
16(=2byte) |
char |
'\u0000' |
16(=2byte) |
int |
0 |
32(=4byte) |
float | 0.0f | 32(=4byte) |
long |
0L |
64(=8byte) |
double | 0.0d | 64(=8byte) |
* Class Variable 내에서는 Boolean Type은 Primitive Type이 아니며, 내부적으로 int 로 변경되며, Boolean의 Default가 False이면 int 값 0으로 인식된다.
▶ Wrapper Class 이란?
primitive type를 객체로 사용하기 위한 개념이다.
8가지 primitive type와 대응되는 wrapper class은 다음과 같다.
Variable Type |
wrapper class |
boolean |
Boolean |
byte |
Byte |
short |
Short |
char |
Charater |
int |
Integer |
float |
Float |
long |
Long |
double |
Double |
ex1)
Integer obj = new Integer(1);
▶ Auto-Boxing 이란?
위 예제와 같이 선언된 obj에 wrapper class를 이용해서 인스턴스화 하지 않아도 자동으로 형변환해주는 것을 말한다.
ex2)
Integer obj = 1;
Auto-Unboxing은 반대로 primitive type에 wrapper class의 기본자료형변환 처리하는 메소드를 이용하지 않고 대입해도
자동으로 primitive type으로 형변환해주는 것을 말한다.
ex3)
int obj2 = new Integer(2);
▶ 출처 및 참조
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
java performance fundamental 저자.김한도 p236
'Programming Language > Java' 카테고리의 다른 글
[Java] java.lang.NoSuchMethodError 오류분석 (0) | 2017.04.07 |
---|---|
[도서리뷰]JAVA PERFORMANCE FUNDAMENTAL (0) | 2017.04.07 |