개발/자바
-
[Socket] Ethernet to 485 communication개발/자바 2020. 9. 18. 18:17
package com.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.InetSocketAddress; import java.net.Socket; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Client { private final static int BUFFER_SIZE = 1024; public static void m..
-
[Regex] Pattern 객체를 이용해 효율적으로 replaceAll() 사용하기개발/자바 2020. 9. 16. 15:05
입력을 받을 때마다 공백을 제거해야 하는 일이 생겼습니다. 자바스크립트는 조금 다른 것 같은데 자바나 C++은 코드 길이가 짧을수록 성능이 안 좋아지는 경우가 많은 것 같습니다. 매번 replaceAll() 호출해 공백을 없애는 게 찝찝해서 효율적인 방법이 있는지 알아보았습니다. String.replaceAll()은 호출될 때마다 regex를 컴파일하기 때문에 성능에 안 좋은 영향을 줍니다. Pattern 객체를 이용하면 이를 피해갈 수 있습니다. Pattern p = Pattern.compile("[ ]*"); System.out.println(p.matcher("Hello World").replaceAll("")); 더하기 기호가 아니라 별 기호를 써줘야 빈 문자열을 replace하지 않아 속도를 올..
-
Dynamic Web Project를 Import한 후 생긴 오류들개발/자바 2020. 4. 25. 21:47
외부에서 작성한 프로젝트를 File System으로 Export한 후 집에서 Import를 하고 나니 프로젝트가 오류 투성이다. Export한 프로젝트의 jdk 버전이 1.8이고 집에서도 이클립스는 1.8에 맞췄는데 jsp 파일에서 java 코드 오류가 일어났다. 자바를 못 읽는 건 이 프로젝트가 jre 정보를 불러오지 못하다는 것. 아니나 다를까 Libraries에 자바가 없다. Build Path에 가보니까 뭔가 이상하다. jdk 버전이 13일 때 나오는 Module Dependencies 탭이 보이고 심지어 jre system library는 unbound가 되었네. 뭐지. 13버전을 지우고 1.8 버전을 넣었지만 프로젝트 이름 옆에 빨간 x 표시는 사라지지 않고 역시 톰캣 서버도 켜지지 않는다. ..
-
추상 클래스는 무엇개발/자바 2020. 3. 19. 19:20
일반적으로 말하는 추상의 의미는 '구체'와 대응된다. 구체적이지 않은 것은 추상적이다. 회화에서의 추상화는 눈에 보이는 사물을 재현하지 않고 눈에 보이지 않는 현실을 순수한 점, 선, 면, 색채 등으로 표현한 그림이다. 컴퓨터 과학에서 말하는 '추상'은 이 느낌과 결이 다르다. 위키백과에 나오는 정의에 따르면 추상화는 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려내는 것을 말한다. 객체 지향 프로그래밍은 기본적으로 현실 세계에 가까운 모습으로 프로그램을 구현하는 것이 목표다. 객체 지향 프로그래밍 패러다임은 컴퓨터 프로그램을 단순한 명령어의 집합으로 보지 않고 객체들의 집합으로 파악하고자 하는 것이며 이 '객체'는 결국 전체를 이루는 요소를 말한다. 현실의 어떤 점을 프로그래밍..
-
참조변수에 대한 작은 오해개발/자바 2020. 3. 16. 14:33
자바에서 기본 자료형 변수를 만들 때를 제외하고, 객체는 전부 new 연산자를 이용해 동적으로 메모리를 할당한다. new 연산자가 반환하는 것은 내부적으로는 메모리의 주소겠지만 자바에서 개발자는 메모리 주소를 알 수 없고 해싱을 거친 참조값(해시코드)만 확인할 수 있다. 애초에 자바에서는 메모리를 직접 다룰 일이 없다. 참조값은 메모리 주소 정보를 갖고 있기 때문에 C/C++의 포인터와 같다고 봐도 된다. 객체를 매개변수로 넘길 때 해당 객체의 참조값이 전달되므로 함수 내에서 객체의 데이터를 변경하면 외부에서도 바뀐 결과를 확인할 수 있다. 다음의 결과는 Lee가 출력된다. changeName()의 매개변수 student는 지역변수이지만 main()에서 생성한 Student 객체의 참조값을 가지고 있으며..
-
정렬 순서 바꾸기개발/자바 2020. 3. 12. 19:08
Collections.sort()와 Arrays.sort()의 기본 정렬 기준은 오름차순이다. 숫자는 물론이고 문자열에 대해서도 마찬가지이므로 사전 순서로 정렬된다. "abc"는 "acc"보다 앞선다. 내림차순을 해야 할 때는 무언가 바꿔줘야 한다. 값이 중복될 때는 추가적인 기준을 만들 수 있다. public class Car { String name; intPS; double zeroToHundred; Car(String name, int PS, double zeroToHundred) { this.name = name; this.PS = PS; this.zeroToHundred = zeroToHundred; } String getName() { return name; } int getPS() { re..
-
배열 탐색도 연산이다개발/자바 2020. 3. 11. 14:38
public class Test { public static void main(String[] args) { Exam[] exam = new Exam[10]; for (int i = 0; i < 10; ++i) { exam[i]= new Exam(); exam[i].kor = 100; exam[i].eng = 100; exam[i].math = 100; } } } 위 코드는 매번 인덱스 연산을 한다. 객체를 생성할 때도 하고 필드에 접근할 때도 한다. 인덱스 연산도 연산이다. 불필요한 연산은 최소화하는 게 좋다. 열 번이라고 대수롭지 않게 생각하면 안 된다. 한 번이든 열 번이든 백 번이든 만 번이든 불필요한 건 불필요한 것이다. 위의 코드는 다음과 같이 바꾸는 것이 좋다. 참조값 복사는 부담을 느끼지 ..