본문 바로가기

Java

Spring MimeMessageHelper attachment filename encoding System.setProperty("mail.mime.splitlongparameters", "false"); MimeMessage message = sender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8"); // Your email content helper.setFrom("..."); helper.setTo("..."); helper.setSubject("..."); helper.setText("..."); helper.addAttachment( MimeUtility.encodeWord(attachmentFilename), attachmentConten 더보기
Duplicate files copied in APK META-INF/notice.txt 안드로이드 프로젝트에서 Spring framework를 사용하려고 실행하니 아래와 같은 오류가 발생하였다. 원인은 notice.txt 파일을 제외시키지 못해서 생기는 문제인 듯하고 이 파일외에도 여러개의 중복되는 파일이 존재하는 듯하다.duplicate files during packaging of APK /Users/myusername/Development/Appname/Appname/Appname/build/apk/Appname-debug-unaligned.apk Execution failed for task ':Appname:packageDebug'. > Duplicate files copied in APK META-INF/notice.txt File 1: /Users/myusername/.grad.. 더보기
Java의 바이트코드 실행 방식 자바 바이트코드는 기계가 바로 실행할 수 있는 언어보다는 비교적 인간이 보기 편한 형태로 기술됐다. 그래서 실행 엔진은 이와 같은 바이트코드를 실제로 JVM 내부에서 기계가 바로 실행할 수 있는 형태로 변경한다. - 인터프리터 : 바이트코드 명령어를 하나씩 읽어서 해석하고 실행한다. 하나하나의 해석은 빠른 대신 인터프리팅 결과의 실행은 느리다는 단점이 있다. 즉, 바이트코드라는 '언어'는 기본적으로 인터프리터 방식으로 동작한다. - JIT(just-in-time) 컴파일러 : 인터프리터의 단점을 보완하기 위해 도입된 것이 JIT 컴파일러다. 인터프리터 방식으로 실행하다가 적절한 시점에 바이트코드 전체를 네이티브 코드로 변경하고, 이후에는 해당 메서드를 네이티브 코드로 직접 실행하는 방식이다. 네이티브 코.. 더보기
[Scala] Local Type Inference 스칼라는 Java랑 다르게 알아서 타입을 추론이 가능하다~!!!! 하지만 막무가내로 되는게 아니라 조금은 안정하게??설계를 한듯하다. 하나씩 예시를 살펴보자~! 첫번째 예시는 코드로 파악이 가능하다. object InferenceTest1 extends App { val x = 1 + 2 * 3 // the type of x is Int val y = x.toString() // the type of y is String def succ(x: Int) = x + 1 // method succ returns Int values} 두번째 예시는 함수에 리턴타입을 정의하지 않았다. 그리고 재귀호출이라서 컴파일에서 오류를 발생시킨다. object InferenceTest2 { def fac(n: Int) = i.. 더보기
[Scala] Explicitly Typed Self References 자기 자신을 다른 Type으로 선언이 가능하다. 예시를 보자 Graph라는 클래스와 abstract class Graph { type Edge type Node def connectWith(node: Node): Edge = { val edge = newEdge(this, node) // now legal edges = edge :: edges edge } } ...} 더보기
[Scala] Lower Type Bounds 아래의 예시를 보면 LinkedList를 구현하였다. 하지만 ListNode[String]이라고 선언하면 ListNode[Object]를 사용할 수 없게 되는 상황이 나온다. case class ListNode[T](h: T, t: ListNode[T]) { def head: T = h def tail: ListNode[T] = t def prepend(elem: T): ListNode[T] = ListNode(elem, this)} 조금 더 규칙을 허술하게 하고 싶을때 ?? 사용하면 좋다. prepend 함수에 [U >: T] 라고 해주면 case class ListNode[+T](h: T, t: ListNode[T]) { def head: T = h def tail: ListNode[T] = t de.. 더보기
[Scala] Upper Type Bounds 스칼라는 추상타입의 경계를 조정? 이 가능하다. 예시로 보자 아래의 코드를 보면 T 더보기
[Scala] Traits 스칼라에서는 JAVA에서 interface와 비슷한 Traits가 있다. 하지만 구현이 가능한 것이 약간 다르다. trait Similarity { def isSimilar(x: Any): Boolean def isNotSimilar(x: Any): Boolean = !isSimilar(x)} 이렇게 trait을 선언하고 아래와 같이 사용해 보자 class Point(xc: Int, yc: Int) extends Similarity { var x: Int = xc var y: Int = yc def isSimilar(obj: Any) = obj.isInstanceOf[Point] && obj.asInstanceOf[Point].x == x&& obj.asInstanceOf[Point].y == y}obj.. 더보기
[Scala] Nested Functions 스칼라에서는 내부 함수??를 만들어서 사용이 가능하다. 말보단 코드로... object FilterTest extends App { def filter(xs: List[Int], threshold: Int) = { def process(ys: List[Int]): List[Int] = if (ys.isEmpty) ys else if (ys.head 더보기
[Java Design Pattern] Design Patterns in Java Tutorial Java로 다양한 디자인 패턴을 정리한 사이트이다. http://www.tutorialspoint.com/design_pattern/index.htm 더보기