'Programming Language'에 해당되는 글 4건

[Excel] 수식 값 자동 갱신 끄기

Programming Language

엑셀의 경우, 변경 사항이 발생 하거나 또는 파일 저장 할 때 마다 수식에서 계산되는 값이 갱신 되는데

만약, 수식을 여러 개 설정 한 경우 + 데이터가 많은 경우, 매우 오래 걸려서 작업 속도가 떨어진다.

수식 값 갱신을 수동 처리를 통해서 위와 같은 불편함을 해소 할 수 있다.


* 방법

메뉴 > 수식 > 계산옵션 > 자동->수동으로 변경


모든 작업 후 지금 계산 Icon 클릭 (또는 키보드에서 F9 입력) 하면, 수동으로 수식 값이 갱신 된다!


Excel 2013 기준 화면이며, 버전에 따라서 해당 메뉴의 위치가 다를 수 있습니다.


[Java] java.lang.NoSuchMethodError 오류분석

Programming Language/Java

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



▶ 참고문헌

http://d2.naver.com/helloworld/1230

[도서리뷰]JAVA PERFORMANCE FUNDAMENTAL

Programming Language/Java


Java 개발자로써 Java Language가 어떻게 Running 되는 지에 대한 호기심과 좀 더 나은 개발자가 되고픈 욕심으로써 작성된 도서 리뷰입니다.


* 도서정보

http://www.kyobobook.co.kr/product/detailViewKor.laf?barcode=9788995765371




Java primitive type, wrapper class and autoboxing

Programming Language/Java

※ 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