본문 바로가기

Java7

Java에서 String은 왜 불변일까? Java에서 String은 불변(Immutable) 객체이다. 불변 객체란 무엇일까? 불변 객체란, 객체가 생성된 후 내부의 상태가 변하지 않고 계속 유지되는 객체를 말한다. 즉, 변수에 객체가 한 번 할당되면, 해당 객체의 참조를 변경할 수도, 내부의 상태를 수정할 수도 없는 것이다. Java에서 String 객체는 immutable, 즉 '불변성'이라는 특성을 가지는데, Java 언어를 디자인한 사람들은 왜 그런 선택을 한 것일까? 크게 5가지 이유를 생각해 볼 수 있다. 1. String Pool String이 불변이기 때문에 String Pool도 존재할 수 있다. 어떤 프로그래밍 언어라도 String 타입은 매우 빈번하게 사용된다. 그래서 Java에서는 String Pool이라는 공간에 Stri.. 2020. 7. 21.
String Constant Pool이란? | Java String Pool Java에서 String 객체를 생성하는 방법은 2가지가 있다. 첫번째는 String literal, 즉 큰 따옴표("")를 사용하는 것이고, 두번째는 new 연산자를 사용하는 것이다. 두 방법에는 어떤 차이가 있을까? 간단한 테스트를 작성해 결과를 살펴보았다. String literal로 생성한 객체는 내용이 같다면 같은 객체, 즉 동일한 메모리 주소를 가리키고 있다. 하지만 new 연산자로 생성한 String 객체는 내용이 같더라도 개별적인 객체임을 알 수 있다. 여기에는 어떤 원리가 숨어있는지, JVM 구조와 함께 이해해 보도록 한다. Java String Pool 흔히 new 연산자로 String 객체를 생성하지 않는 것이 좋다는 말을 볼 수 있다. String literal로 생성하면 해당 St.. 2020. 7. 20.
contribute 할만한 Java open-source 프로젝트 모음 Java 공부 용도로 오픈 소스 프로젝트의 코드를 분석해보고, 기회가 되면 contribute도 해보면 좋겠다 싶어서 괜찮다 싶은 프로젝트들을 모아 두려 한다. 일단 MunGell/awesome-for-beginners 이 링크에 잘 정리되어 있으니, 하나하나씩 볼 예정. 아래 목록은 Quora - "What are some good open source projects in Java to contribute to and start learning Java?" 질문에 달린 답변에서 가져왔다. War Worlds – Strategy based game – Java server and Android client. OpenWorm – neuromechanical model of a small nematode .. 2019. 9. 2.
JVM, JRE, 그리고 JDK의 개념 JVM - JVM (Java Virtual Machine)은 추상적인(abstract) 머신이다. 즉 JVM이 가상(virtual) 머신인 것은 그것이 물리적으로는 존재하지 않기 때문이다. - JVM은 Java 바이트코드가 실행될 수 있는 런타임 환경을 제공하는 명세(specification)다. (ex. HotSpot: JVM 구현체) - Java가 아닌 다른 언어(ex. Kotlin, Scala, Groovy 등)로 쓰여진 프로그램도 Java 바이트코드로 컴파일 되어 JVM이 실행할 수 있다. - JVM은 다양한 하드웨어와 소프트웨어 플랫폼에서 이용할 수 있다. JVM, JRE, JDK는 플랫폼 의존적인데, 각 OS의 설정이 서로 다르기 때문이다. 하지만 Java 언어 자체는 플랫폼 독립적이다. - .. 2019. 2. 4.
POJO 이해하기 이 글은 spring.io의 Understanding POJOs를 번역한 것입니다. POJO란 Plain Old Java Object의 줄임말이며, 프레임워크 확장에 의해 엉망진창이 되지 않는, 순수한 Java 객체(인스턴스)를 의미한다.만약 JMS로부터 메시지를 받고자 한다면, MessageListener interface를 구현한 클래스를 다음과 같이 작성해야 할 것이다. public class ExampleListener implements MessageListener { public void onMessage(Message message) { if (message instanceof TextMessage) { try { System.out.println(((TextMessage) message)... 2018. 12. 12.
Spring Boot / JSP jstl 관련 에러 (An invalid XML character 등) Spring Boot로 간단한 survey 페이지를 만들고 있는데, 원인을 알 수 없는 이상한 에러가 발생하고 있다. pom.xml 4.0.0 com.-----(생략)----- -----(생략)----- 0.0.1-SNAPSHOT jar -----(생략)----- -----(생략)----- org.springframework.boot spring-boot-starter-parent 2.1.0.RELEASE UTF-8 UTF-8 1.8 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-devtools runtime mysql mysql-connector-java runtime org.springframe.. 2018. 11. 27.
EL(Expression Language)과 JSTL(JSP Standard Tag Library) EL(Expression Language)이란? Expression Language(표현 언어)는 값을 표현하는 데 사용되는 스크립트 언어로, JSP의 기본 문법을 보완하는 역할을 한다. JSP에는 Java 코드와 markup 요소들이 섞여있다. 그러다보니 프론트엔드 개발자, 디자이너들도 쉽게 볼 수 있는 코드에 대한 needs가 있었고, 프론트엔드와 백엔드 사이에 어떻게 하면 효율적으로 일들을 나눌 수 있을 것인가라는 고민이 있었다.이를 위해 Java 코드보다 더 간단하고 직관적으로 사용할 수 있는 형태로 나온 것이 EL이다. EL이 제공하는 기능들은 다음과 같다.JSP의 스코프(scope)에 맞는 속성 사용 각 scope의 변수들을 손쉽게 사용할 수 있다.(Framework에서 제공하는)집합 객체에 .. 2018. 7. 1.