본문 바로가기
[Effective Java] Serializable 인터페이스를 분별력 있게 구현하자. [Effective Java] Serializable 인터페이스를 분별력 있게 구현하자. - 객체 직렬화(object serialization) API 는 객체를 바이트 스트림으로 인코딩하고, 인코딩된 바이트 스트림으로부터 객체를 복원(디코딩) 하는 프레임워크이다. - 객체를 바이트 스트림으로 인코딩하는 것을 직렬화(serializing)이라 하고, 그 반대의 절차를 역직렬화(deserializing)이라고 한다. - 객체가 일단 직렬화되면, 인코딩된 객체는 향후에 역직렬화 하기 위해 하나의 실행 중인 VM 에서 다른 VM 으로 전송되거나 디스크에 저장될 수 있다. 직렬화는 원격 통신을 위한 표준 통신 회선 수준의 객체 표현을 제공한다. 직렬화 프록시는 effective java 의 직렬화 주제중 가장 .. 2017. 3. 21.
[Effective Java] 필요하면 방어 복사본을 만들자. [Effective Java] 필요하면 방어 복사본을 만들자. - 자바는 꽤나 안전한 언어이지만, 우리 클래스의 클라이언트가 불변 규칙을 파괴하기 위해 최선을 다할 거라는 가정하에 방어적으로 프로그램을 작성해야 한다. - 가변 객체인 매개 변수는 각각의 방어복사본(defensive copy)을 만들어서 생성자에 전달해야 한다. 그렇지 않으면 예상치 못한 여러 상황이 발생할 수 있다. - 방어복사본은 매개 변수의 유효성 검사에 앞서 만들어야 하며, 유효성 검사는 원본이 아닌 복사본을 대상으로 해야 한다!! ( TOCTOU 공격 ( 검사시간/사용시간) 이슈 ) - clone 은 위험한 복사방법이므로 가급적이면 다른 방법으로 복제하자. final 이 아닌 Class 는 sub class 가 clone 을 상속.. 2017. 1. 10.
[Effective Java] equals 메소드를 오버라이드 할 때는 hashCode 메소드도 항상 같이 오버라이드 하자. equals 메소드를 오버라이드 할 때는 hashCode 메소드도 항상 같이 오버라이드 하자. - equals 메소드를 오버라이드 하는 모든 클래스에서는 반드시 hashCode 메소드도 오버라이드 해야 한다. 그렇게 하지 않으면 Object.hashCode 메소드의 보편적 계약을 위반하게 되어, HashMap 과 HashSet 및 HashTable 을 포함하는 모든 hash 기반 컬렉션들에서 제대로 작동 안 할 수 있다. - HashCode 의 메소드 명세 계약 사항은 아래와 같다. 1. equals 메소드에서 비교하는 객체의 값이 변경되지 않는다면, 여러번 호출해도 일관성 있는 정수를 반환해야 한다. ( 단 어플리케이션이 재실행 될 때까지 같을 필요는 없다. ) 2. equals 메소드 호출 결과 두 .. 2016. 10. 5.
Objective-C 고급 ( Advanced Objective-C ) Objective-C 고급 ( Advanced Objective-C ) 출처 : http://www.tutorialspoint.com/objective_c/objective_c_classes_objects.htm > - class 는 @interface 와 @implementation 의 두 파트로 나뉘어 정의된다. - 대부분이 objects 를 상속한다. - objects 는 메세지를 받기 때문에 receiver 로 불리기도 한다. - Properties 는 다른 class 에서의 access 를 접근하도록 도와준다. - ex) @interface Box:NSObject { double length; double breadth; } @property(nonatomic, readwrite) double .. 2015. 6. 18.
millisecond to date / date to millisecond converter MilliSecond To Date Converter 2015. 2. 5.
MYSQL TUtorial #1 웹 데이터베이스 만들기 MYSQL TUtorial #1 웹 데이터베이스 만들기 MYSQL 시작 MySQL 사용을 위해서는 다음의 과정을 완료해야 한다. 1. 웹 서버에 MySQL 설치를 마쳐야 한다. 파일 설치 MySQL 실행한 사용자 설정 경로(path) 설정 필요하면 mysql_install_db 를 실행 루트 비밀번호 설정 필요없는 사용자와 테스트 DB 등을 삭제 MySQL 서버 돌리고 자동적으로 실행되도록 설정 사용자 설정 : GRANT 명령어 Global, Database, Table, Column 4단계로 권한 조정이 필요하다. GRANT privileges [columns] ON itemTO user_name [IDENTIFIED BY 'password'][REQUIRE ssl_options][WITH [GRANT.. 2014. 1. 21.
[Tutorial] Introduction of PHP. Introduction of PHP. Tutorial 대신 를 사용하는 것을 SGML 방식이라고 하며, 이 스타일을 사용하려면 config 파일의 short_open_tags 를 활성화시키거나 짧은 스타일 태그를 사용할 수 있도록 PHP 를 컴파일 해야 한다. 이 방식은 대부분의 서버가 지원하지만, 몇몇 서버는 xml 형태의 선언에 영향을 주기 때문에 Off 를 시켜 놓는다. 따라서 특수한 경우 혹은 config 에 확신이 있는 경우가 아니면 사용하지 않는 것이 좋겠다. 형식으로도 사용 가능하다. ASP 방식으로 알려진 도 사용할 수 있는데, 이 역시 config 파일에서 asp_tags 를 활성해놓았어야 사용할 수 있다. 이는 대부분의 서버에서 기본으로 활성화되어 있지 않기 때문에 "가급적" 사용하지 .. 2013. 10. 5.
[Java] Locale Based Date Format Sample Code. Java, Locale Based Date Format Sample Code. 요런 포맷을 얻고 싶다면.. 2013년 6월 30일 일요일오전 1:43 아래코드를 통해 dateFormat 과 timeFormat 을 각각 얻어서 출력시키면 된다.! Date now = new Date( System.currentTimeMillis() );DateFormat dateFormat = DateFormat.getDateInstance( DateFormat.FULL, Locale.getDefault() );DateFormat timeFormat = DateFormat.getTimeInstance( DateFormat.SHORT, Locale.getDefault() ); Date, date format, DateForm.. 2013. 7. 31.
[VB6] Data Type 과 Suffix Literal Data Type 과 Suffix Literal [이전강좌] VB의 대표적인 Control 들에 대해 알고 싶나요? 여기를 클릭 Data Type ByteIntegerLongSingleDoubleCurrencyDecimal String (fixed length)String (variable length)DateBooleanObjectVariant(numeric)Variant(text) Suffix Literal 숫자를 사용할 때, 뒤에 붙여주어 data type 을 알 수 있도록 함 & Long! Single# Double@ Currency String literal 은 "" 로, Date literal 은 ## 로 한다. [다음강좌] 변수 정의와 Scope 에 대해 공부해보장. !, "", #, ##,.. 2013. 6. 1.
반응형