목록프로그래밍/Java (49)
Seungdols Company
java.lang.reflect의 핵심 리플렉션 기능을 이용하면, 메모리에 적재된 클래스의 정보를 가져오는 프로그램을 작성 할 수 있다. Class가 주어지면, 해당 객체가 나타내는 클래스의 생성자, 메서드, 필드등을 나타내는 Constructor, Method, Field 객체들을 가져 올수 있으며, 이 객체를 이용하여, 클래스의 멤버 이름이나, 필드 자료형, 메서드 시그니처 정보를 얻을 수 있다. 그리고, 해당 객체를 이용하여, 연결 되어 있는 생성자, 메서드, 필드들을 Reflectively 조작 할 수 있다. 단점- 컴파일 시점에 자료형을 검사하는 이점을 포기해야 함- 리플렉션 기능을 이용하는 코드는 난잡하다.- 성능이 낮다. 리플렉션이 필요한 프로그램- 클래스 브라우저- 객체 검사도구- 코드 분..
자료형 타입을 해당 클래스로 한다면, 확장성이 떨어진다. 대신 인터페이스 타입으로 한다면, 객체에 대한 확장성이 높아지므로 선호하도록 하자. 단, 일반 인터페이스 구현 규약에는 없는 특별한 기능인, 동기화라던지 특수 기능이 있다면,클래스로 참조하는 것이 당연하다. 그리고, 마땅한 인터페이스가 없다면 그것 또한 클래스를 참조하는 것이 당연하다. 1234 //Good List subcribers = new Vector(); //Bad Vector subcribers = new Vector();cs 무단 수정 및 배포는 금지합니다. 모든 내용은 본 블로그 운영자가 정리한 내용입니다. 참조한 정보에 대해서는 출처를 남기고 있습니다. 틀린 내용 / 오류가 포함된 내용은 댓글로 남겨주세요. choiseungho08..
public class PerformanceStringCompare { private String[] args = { "ASD", "BCD", "WWE", "asdfsdfasdfasdfasdfadf", "sdfasdfsdfasdfasdf", "sdfsdfsdfsdfsfsfd", "asdf sdfasdfsd f sdfasdfsdf s sdfs dfsf ", "ASD", "BCD", "WWE", "asdfsdfasdfasdfasdfadf", "sdfasdfsdfasdfasdf", "sdfsdfsdfsdfsfsfd", "asdf sdfasdfsd f sdfasdfsdf s sdfs dfsf ", "ASD", "BCD", "WWE", "asdfsdfasdfasdfasdfadf", "sdfasdfsdfasdfas..
public class AttentionOverloading { public static String classify(Set s) { return "Set"; } public static String classify(List lst) { return "List"; } public static String classify(Collection c) { return "Collection"; } public static void main(String[] args) { Collection[] collections = { new HashSet(), new ArrayList(), new HashMap().values() }; for(Collection c : collections) { System.out.printl..
123456789101112131415161718192021222324252627282930313233public final class Period { //객체의 컴포넌트로는 가능하다면, 변경 불가능한 객체를 사용해야 한다는 점이 핵심이다. private final Date start; private final Date end; // public Period(Date start, Date end) {// if (start.compareTo(end) > 0) {// throw new IllegalArgumentException(start + " After " + end);// }// this.start = start;// this.end = end;// } public Period(Date start, D..
IntelliJ를 키고 나서 오? 남는 시간 자바 8의 신기능 람다식을 써보자꾸나 해서 켰다. 그런데...아니 내가... 람다식 문법도 몰라도 그렇지 왜 오류가.. 언어 레벨을 지원 안한다고 하는걸까 ? 내가 그렇게 멍청했나;;;;??? 그러던 중 알고보니 레벨을 지정 할 수 있다는 사실을 알았습니다. 방법은 쉽더라구요. 요렇게 하고 적용하니 바로 에러가 따악! 사라지네요 ? 람다식에 대한 포스팅은 조만간 제대로 준비해서 올리겠습니다. 저는 이만.
제네릭 지우개 기능? 뭐지? 뭘까요 ? C# 코드 Java 코드 두 코드의 차이는 거의 없습니다. 다 모두 제네릭을 인자로 받아 List 타입을 체크 하는 것입니다. 그런데 C#의 코드는 정상적으로 구별 해냅니다. 그 이유는 코드가 컴파일 되는 시점에서 Intermediate Language코드가 타입에 대한 정보도 같이 저장하고 있습니다. 이 코드가 Common Language Runtime 에서 실행 되는 때에 IL코드를 바이너리로 변환 하는데 바이너리 역시 타입 정보까지 변환합니다. 그렇기 때문에 더 우수한 제네릭 기능입니다. 그렇지만 Java의 경우 컴파일 에러를 발생시킵니다. 로 변환하라는 것이죠. 그러나 이 와일드 카드의 의미는 < ? extends Object> 이므로 Object의 자손들 ..
public class Product { private int price; public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } public Product(int price) { // TODO Auto-generated constructor stub this.price = price; } public Product() { this.price = 100; } } int price는 가격을 의미한다. 이 것은 나중에 자식 클래스에서 물건의 값을 설정 할 것이다. public class TV extends Product{ public TV() { // TODO Auto-generated con..
java program에서 성능을 향상 시키는 방법은 여러가지가 있다.그 중에서 한 가지는 Static을 사용하는 것이다. 하지만 알고 사용하면 득이 되지만, 모르고 사용한다면 독이 된다. 시스템의 오류, 시스템 성능의 부하등등Static의 특징static이란 단어는 ‘정적인, 움직이지 않는’이라는 의미이다. 자바에서 static이라고 지정했다면, 해당 메서드, 변수는 정적이다.static으로 변수를 지정하게 되면 클래스 변수라고 한다.그 변수는 객체의 변수가 아니라 클래스의 변수가 되기때문이다.이유를 살짝 말하자면 Static으로 선언된 변수, 메소드는 컴파일시점에서도 여러 종류가 있는데 그 시점중 하나가 static정보를 먼저 가져가서 메모리에 적재한다. static의 경우 전역변수처럼 생명주기(li..
우선 if, switch문들을 분기문이라고 하는데 if문에서 분기를 많이 사용하면 시간이 많이 소요 된다고 생각하지만, if문 조건안에 들어가는 비교구문에서 속도를 잡아먹지 않는 한 if문장 자체는 그리 많은 시간이 걸리지는 않는다. 이것은 살짝 알고 가자. 그리고 숫자로된 분기는 if문보다 switch문을 사용하는 것이 가독성 향상을 줄 수 있다. 반복구문은 3종류가 있다. for, while, do-while while문의 경우 조건이 잘 못된다면, 무한루프에 빠질 가능성이 있으므로 for문을 사용하는 것이 좋다. 우선 for문에 for(int i = 0; i < list.size(); i++) { } 이런 for문이 있다면 좋지 않다. collection의 list.size()메소드를 매번 호출하게..
자바 기반 프로그래밍을 할 때 가장 많이 사용하는 클래스 object class 제외하고 나면 String class, collection class를 가장 많이 사용한다.요즘은 myBatis, ibatis, Hibernate등과 같은 데이터 매핑 프레임워크를 사용했으나 예전에는 그냥 직접 SQL을 쓰곤 했다.여기서 많이들 String을 사용하게 되는데 이 부분에서 나중에 응답속도가 늦어진다.왜 자바는 StringBuffer, StringBuilder를 써야 할까!!JDK5.0에서부터 StringBuilder 클래스는 추가 되었다. 두 클래스가 제공하는 메소드는 동일하다. 그런데 뭐가 다를까?바로 ThreadSafe를 지원하느냐 하지 않느냐의 차이로 좁힐 수 있다.StringBuffer class는 Th..
https://netbeans.org/downloads/index.html 처음 홈페이지에서 가장 무거운 버젼을 택했습니다. C , C++까지도 커버가 되는 거죠. 사실은 굳이 무거운 걸 쓸 필요는 없습니다. 저는 경로를 따로 잡아주었습니다. 이 쪽은 알아서 잡더군요..ㅎ
프로젝트 우 클릭 후 Restore 클릭!!! 참 쉽구나..-^*^-
명령어(동사) 중심의 프로그래밍 방식 전체 과정을 나누어 처리하는 각 단위를 함수(function)라고 한다면, 절차지향언어는 개발하려는 프로그램에 필요한 기능(함수)들을 여러 개의 작은 함수로 나누고, 그 기능들이 처음부터 흘러가는 순서대로 해결하는 방식으로 프로그래밍하는 방법을 의미한다. 함수와 데이터를 각각 분리함으로써 유지보수와 수정이 어려움. 객체(명사) 중심의 프로그래밍 방식 개발하고자 하는 프로그램이 어떤 객체들로 이루어져 있는지 분석한 후, 개발 대상을 구성하고 있는 객체들을 만들고, 객체들 간의 메시지와 데이터를 교환하는 방식으로 문제를 해결하는 프로그래밍 방법을 의미한다. 객체에는 함수와 관련 데이터들이 함께 들어 있어서, 관리 & 수정이 편리함. ▶ 추상화 개발하려는 대상과 목적에 맞..
문자열에 관하여.. 프로그래밍 언어에서 문자열이 기본형인 것은 SNOBOL 언어? 아마 그 이후 언어에서는 기본형 타입이 아닌 문자배열 기준으로 문자열을 생성 할 것이다. C/C++ 같은 경우로 char 형 배열을 이용한다. 그러나 Java는 객체지향언어. 즉, Scalar 타입(기본자료형)이외의 String Class를 지원해준다. 그리하여 String class를 이용하여 문자열을 생성하면 된다. 보통 3가지로 분류 되는데 현재 7버젼의 경우 이 정도라고 생각하면 되고, 자바 8에서는 아마 람다식이 추가 된 걸로 알고 있다. 1. String - 메모리 불변- 문자열 변경시 객체가 새로 생성- equals() 오버라이딩 2. StringBuffer- 메모리 가변- 문자열 변경시 기존 객체가 변경- 메..