전체 글

전체 글

    ORA-00904 에러 부적절한 식별자

    ORA-00904 에러 부적절한 식별자

    Question: I am running a SQL statement and I get a SQL*Plus error ORA-00904 invalid identifier. 질문: 저 SQL 썻는데 ORA-00904 에러 떴어요. Answer: When ORA-00904 occurs, you must enter a valid column name as it is either missing or the one entered is invalid. The "invalid identifier" most common happens when you are referencing an invalid alias in a select statement. 답: ORA-00904 에러가 떳다면, 컬럼이 빠졌거나 이름이 잘못되있..

    Meven에서 자바(Java) SDK 최신버전 사용하기

    Meven에서 자바(Java) SDK 최신버전 사용하기

    Meven을 사용할 때는 IDE의 설정만으로 자바 버전이 적용이 안됩니다. 프로젝트 SDK에 1.8로 맞추어져있어도 정작 모듈에 들어가보면 5에 맞추어져 있죠. 이를 강제로 8로 바꾸어도 에러는 안뜹니다. IDE는 이를 감지하지 못하죠 다만 람다표현식과 같은 기능은 못쓰게 됩니다. 컴파일은 에러가 안나도 빌드할때 에러가 날거에요. 해결법은 pom.xml에 아래 내용을 붙어주시면 됩니다. org.apache.maven.plugins maven-compiler-plugin 1.8 1.8 붙이시고 다시 빌드해보세요 소스나 타겟은 본인의 버전에 맞추어서 합시다.

    이펙티브 자바 규칙 18 - 추상 클래스 대신 인터페이스를 사용하자

    이펙티브 자바 규칙 18 - 추상 클래스 대신 인터페이스를 사용하자

    자바에는 여러 구현을 허용하는 자료형을 만드는 방법이 두가지 있습니다. 추상형 클래스와 인터페이스입니다. 이 두가지의 차이점은 추상클래스는 구현된 메소드를 포함할 수 있지만, 인터페이스는 아니라는 점입니다... 는 점이었지만 자바 1.8부터 default 를 활용하여 언터페이스도 body를 가질 수 있게 되었습니다! public interface Test { public void existingMethod(); default public void newDefaultMethod() { System.out.println("New default method is added in interface"); } }덕분에 우리는 공부할 게 늘었습니다. 추상형 클래스는 구현하려면 상속(계승)을 써야합니다. 자바에서는 멀..

    예외 - Error creating bean with name 'sqlSessionFactory'

    예외 - Error creating bean with name 'sqlSessionFactory'

    "C:\Program Files\Apache Software Foundation\Tomcat 9.0\bin\catalina.bat" run[2018-02-17 03:30:25,265] Artifact MyProject:war exploded: Waiting for server connection to start artifact deployment...Using CATALINA_BASE: "C:\Users\PC\.IntelliJIdea2017.2\system\tomcat\Unnamed_MyProject"Using CATALINA_HOME: "C:\Program Files\Apache Software Foundation\Tomcat 9.0"Using CATALINA_TMPDIR: "C:\Program Fil..

    이펙티브 자바 규칙 17 - 계승을 위한 문서를 갖추거나, 그럴 수 없다면 금지하자

    이펙티브 자바 규칙 17 - 계승을 위한 문서를 갖추거나, 그럴 수 없다면 금지하자

    저번 포스트에서는 계승(상속)의 위험성을 설명하면서 구성의 디자인 패턴을 설명했습니다. 이번엔 EFJ에서는 상속의 위험성을 다루고 있습니다. 저번의 포스트에서 본 바와 같이 상속은 캡슐화를 깨뜨릴 수 있는 위험을 내포하고 있는 기능입니다. 때문에 오버라이드 등을 사용할 때 주의가 필요합니다. 1. 메소드를 재정의 할 때는 무슨 일이 발생하는지 정확하게 문서로 남겨야 한다. /** * {@inheritDoc} * * This implementation iterates over the collection looking for the * specified element. If it finds the element, it removes the element * from the collection using th..

    이펙티브 자바 규칙 16 - 계승하는 대신 구성하라

    이펙티브 자바 규칙 16 - 계승하는 대신 구성하라

    자바를 하는 사람은 상속(계승)을 모를 수가 없죠. 코드의 재사용을 돕는 강력한 도구입니다. 하지만 상속을 적절하게 사용하지 못한 소프트웨어는 깨지기 쉬운데요. 그래서 상속에는 그에 걸맞는 문서가 있는 것이 안전합니다. 이펙티브 자바에서는 먼저 상속의 단점을 나열하고 있습니다. 먼저 메소드와 달리 상속은 캡슐화 원칙을 위반합니다. 상위 클래스를 상속한 하위클래스는 상위클래스에 의존적입니다. 상위 클래스가 수정되면, 하위 클래스의 코드도 필연적으로 수정되어야 하죠. 캡슐화의 조건을 깨뜨리고 있습니다. 예제 코드로 한번 살펴봅시다. package dao; import java.util.Collection; import java.util.HashSet; public class InstrumentedHashSe..

    이펙티브 자바 규칙 15 - 변경 가능성을 최소화하라

    자바의 클래스는 변경가능한 클래스와 변경 불가능한 클래스로 나눌 수 있습니다. final 선언자가 큰 역할을 하죠. EFJ15에서는 이 변경 불가능한(immutable) 클래스의 이점에 대해 설명하면서, 특별한 이유가 없을 때에는 되도록 변경이 불가능 하도록 설정하라고 권하고 있습니다. 먼저 변경 불가능한 클래스를 만들 때 지켜야할 5규칙입니다. 1. 객체 상태를 변경하는 메소드(Setter 등)를 제공하지 않는다. 2. 계승할 수 없도록 한다.(상속 불가)하위 클래스로 인해 변경될 가능성을 차단합니다. 3. 모든 필드를 final로 선언한다.시스템상으로 강제해 의도를 분명히 합니다. 4. 모든 필드를 private로 선언한다.클라이언트가 객체를 직접 수정하는 일을 막습니다. 5. 변경 컴포넌트에 대한 ..

    디자인 패턴 - 프록시 패턴(Proxy pattern)

    디자인 패턴 - 프록시 패턴(Proxy pattern)

    프록시는 클라이언트나 대상 사이의 대리 또는 접근 방법의 제어를 말하는 오브젝트를 일컫을 때 사용하는 단어입니다. 디자인 패턴 중 프록시 패턴이 있습니다. 디자인 패턴의 프록시는 타켓의 기능을 추가하지 않습니다. Spring을 다루어 보신 분이라면 AOP, intercepter, filter 등을 사용해보셨을 텐데요. 이 기능들의 공통점은 오브젝트에 접근할 때 먼저 처리해야할 점 또는 나중에 처리해야할 점의 설정을 도와준다는 점이죠,타켓에 접근하는 방식을 변경해주는 역할을 합니다. 프록시 패턴이 이와 비슷합니다. 프록시 패턴을 이해하기 위해서는 먼저 리플렉션에 대한 이해가 필요합니다. 리플렉션이란, 오브젝트에 대한 구체적인 클래스 정보 없이도 그 오브젝트가 가진 변수, 메소드 등에 접근할 수 있게 하는 ..

    디자인 패턴 - 데코레이터 패턴(Decorator Pattern)

    디자인 패턴 - 데코레이터 패턴(Decorator Pattern)

    데코레이터 패턴은 목표 객체의 부가적인 속성을 동적으로 표현해주기 위해 사용하는 디자인 패턴입니다. 동적으로 연결된다는 의미는 기능을 부가할 때, 어떤 방법과 순서에 따라서 연결되지 않는다는 것을 의미합니다. 자동차를 만들 때를 한번 생각해보죠. 자동차가 있으면, 네비게이션 달고, 스킨 튜닝하고, 썬루프 달고 하는 걸 순서대로 하지는 않겠죠? 사용자의 요구에 맞추어서 해주겠죠. 코드를 한번 봅시다. public interface Car { public void assemble(); }public class BasicCar implements Car { @Override public void assemble() { System.out.print("Basic Car."); } }public class Car..

    JDBC 트랜잭션과 트랜잭션 추상화 (Transaction, Abstraction of Transaction)

    JDBC 트랜잭션과 트랜잭션 추상화 (Transaction, Abstraction of Transaction)

    자바에서 JDBC 데이터베이스 접근을 할 때는 자동적으로 트랜잭션이 적용됩니다. DB는 그 자체로 완벽한 트랜잭션을 제공해서, 다중 데이터의 수정이나 삭제 등을 요청했을 때 중간에 어떠한 오류나 외부 상황에 의해 작업이 종료되더라도 일부만 삭제되거나 하는 일은 없습니다. 이러한 일관성은 DB의 신뢰로 이어지죠. JDBC로 데이터베이스를 이용할 때 트랜잭션이 나눠지는 경계의 조건은 두가지입니다. 확정 작업의 커밋과 본래의 상태로 돌리는 롤백이죠. 하나의 쿼리 작업(업데이트, 삭제 등)이 끝나면 트랜잭션이 종료 됨과 동시에 새로운 트랜잭션 작업의 실행에 들어갑니다. 트랜잭션을 설명할 때 가장 많이 사용하는 예인 은행 계좌 송금을 예로 들어볼까요 트랜잭션을 통한 한 단위로 묶인 것이 아니라면, JDBC는 이 ..

    CSS 파일이 변경 후 적용이 안될 때

    CSS 파일이 변경 후 적용이 안될 때

    CSS 파일이 변경 후 적용이 안될 때 시간을 많이 잡아먹어서, 문제 해결 후 기록합니다. .col .col .col 현재 저는 그리드를 만들려 합니다. 이 그리드에 스타일을 주기 위해 링크를 한 CSS 파일을 선택자로 수정해 주었습니다. 일단 선택이 잘 되는지 확인해보기 위해 테두리도 넣어보고 색도 아무거나 넣어봤습니다. .row { border: solid #2B81AF thick; background-color: #710909; } 그런데 결과는? 변화가 없습니다. 설정이 잘못됐을까요? 그리드에 직접 스타일을 넣어봅시다. .col .col .col 넣고 확인해보면 잘 됩니다. 선택자 문제라 생각해서 이것저것 해보고, 안되서 검색해보니 CSS 파일 링크문제더군요. 이전에 사용한 CSS를 브라우저가 캐..

    이펙티브 자바 규칙 13 - 클래스와 멤버의 접근 권한은 최소화하라

    객체 지향의 모듈에서 중요한 특성을 뽑으라면 정보 은닉과 캡슐화가 있을 것입니다. 정보은닉은 모듈사이의 의존성을 낮추어 주어서 개별적으로 개발, 시험, 최적화한다는 특성에 목적을 두고 있습니다. 정보은닉과 캡슐화가 이루어진 모듈은 병렬적으로 개발할 수 있기 때문에 시스템 개발 속도가 올라가고다른 모듈에 영향을 끼칠 걱정 없이 디버깅이 가능합니다. 이 외에도 유지보수의 용이성, 소프트웨어의 재사용 용이 등 여러가지 장점을 누리기 위해 정보은닉을 할 필요가 있습니다. 정보은닉의 핵심적인 원칙은 각 클래스와 멤버는 가능한 한 접근이 불가능 하도록 만들어야 한다는 점입니다. 자바는 네개의 접근 권한을 제공합니다. private 클래스 내부에서만 접근이 가능합니다. package-private 같은 패키지 내에서..

    리눅스 - CentOs, Oracle 설치 및 데이터베이스 생성

    리눅스 - CentOs, Oracle 설치 및 데이터베이스 생성

    이 페이지에서는 오라클을 설치해보고 데이터베이스를 생성해보겠습니다. 먼저 제 가상머신은 현재 오라클을 설치할 수 있을만큼 공간이 크지 않기 때문에 임시적으로 2G를 늘려 사용할 것입니다. 공간이 충분하신 분들은 패스해주세요 dd if=/dev/zero of=/swapfile bs=1024 count=4194304 를 입력해줍시다. mkswap /swapfile 로 swap swapon /swapfile 순서대로 따라합시다. swapon -s 에서 swapfile이 보이면 성공입니다. cd /etc/rc.d 로 이동한뒤 chmod 755 rc.local 로 권한을 수정해줍시다 그리고 vi rc.local 로 편집을 해줘야 합니다. swapon /swapfile 을 적어두면 재부팅 되더라도 사라지지 않고, ..

    자바 Exception 예외 (throwable, Error, Exception, RuntimeException)

    자바 Exception 예외 (throwable, Error, Exception, RuntimeException)

    자바의 예외에는 위와 같은 종류로 나누어집니다 크게 Error와 Exception으로 나뉩니다. Error 에러는 시스템에 문제가 생겼을 때 발생합니다. 이는 프로그래머나 사용자가 수정할 수 없는 성격으로서 예로는 OutOfMemoryError, StackOverflowError 등이 있습니다. 이런 에러는 코드로 잡을 수 없는 상황이 많습니다. Exception 익셉션 클래스는 다시 RuntimeException(uncheck 예외)을 상속하는 Exception들과 그 외의 Exception(check 예외)으로 나뉩니다. 자바를 다루다 보면 자주 사용하는 코드들이 파일 인풋 아웃풋, DB 관련 코드일 텐데 이 부분을 구현하다보면 try, catch 로 묶거나 throw를 사용하여 에러를 던지는 경우를..

    이펙티브 자바 규칙 12 - Comparable 구현을 고려하라

    이펙티브 자바 규칙 12 - Comparable 구현을 고려하라

    Comparable은 Comparable 인터페이스에 포함된 유일한 메소드입니다. Object의 equals 메소드와 특성은 비슷하지만, 단순한 동치성 검사 이외에 순서 비교가 가능하며 좀 더 일반적입니다. 먼저 CompareTo의 규약을 살펴봅시다. 본 메소드는 이 객체와 인자로 주어진 객체를 비교한다. 이 객체의 값이 인자로 주어진 객체보다 작으면 음수를, 같으면 0을, 크면 양수를 반환한다. 인자로 전달된 객체의 자료형이 이 객체와 비교 불가능한 자료형인 경우에는 ClassCast Exception 예외를 던진다.아래의 명세에 등장하는 sgn(expression)은 수학에서의 signum 함수를 나타내는 것으로 -1, 0, 1 가운데 한 값을 반환한다. 어떤 값이 반환될지는 expression의 값..

    이펙티브 자바 규칙 10 - toString은 항상 재정의하자

    Java를 다루어 본 분들이라면 잘 알다시피 toString은 객체를 println printf, 문자열 연결 연산자, assert, 디버거 등의 메소드가 호출했을 때 객체의 정보를 표현하기 위해 자동으로 호출되는 메소드 입니다. 재정의 하지 않는다면 객체를 문자열 관련 메소드로 호출했을 때 PhoneNumber@163b91 과 같이 ' 클래스 이름 + @ + 16진수로 표현된 해시코드 '로 구성된 문자열이 리턴됩니다. 이 toString은 객체를 손쉽게 표현하기 위해 재정의해주는 게 좋습니다. toString의 일반규약에는 이런 구절도 있습니다. "모든 하위 클래스는 이 메소드를 재정의함이 바람직하다." 이펙티브 자바에서는 이 toString을 재정의 할 때 신경써야할 점을 꼽고 있습니다. 1. toS..

    디자인 패턴 - 전략 패턴(Strategy pattern) 예시 / 예제

    디자인 패턴 - 전략 패턴(Strategy pattern) 예시 / 예제

    전략 패턴이란 인터페이스를 두고 클래스와 클래스를 느슨하게 연결하여 재사용할 수 있는 코드를 극대화하는 다지안 패턴 중 하나입니다. 자바, C++ 등에서 활용됩니다. 일단 예제코드를 한번 보죠. 나름 모형도 한번 만들어 봤습니다. import java.io.File; import java.util.ArrayList; public class Client { public static void main(String[] args) { CompressionContext ctx = new CompressionContext(); //we could assume context is already set by preferences ctx.setCompressionStrategy(new ZipCompressionStrat..

    이펙티브 자바 규칙 9 - equal 메소드를 재정의 할 때 hashCode()도 재정의 하자

    이펙티브 자바 규칙 9 - equal 메소드를 재정의 할 때 hashCode()도 재정의 하자

    Object 클래스의 명세를 보면 hashCode의 일반 규약은 아래와 같습니다. 어플리케이션 실행 중 같은 객체의 hashCode를 여러 번 호출하는 경우, equals가 사용하는 정보들이 변경되지 않았다면, 언제나 동일한 정수가 반환되어야한다. 다만 프로그램이 종료되었다가 다시 실행되어도 같은 값이 나올 필요는 없다.equals(Object) 메소드가 같다고 판정한 두 객체의 hashCode 값은 같아야 한다.equals(Object) 메소드가 다르다고 판정한 두 객체의 hashCode 값은 꼭 다를 필요는 없다. 그러나 서로 다른 hashCode 값이 나오면 해시 테이블의 성능이 향상될 수 있다는 점은 이해하고 있어야 한다. 저번 포스트에서 equals 메소드를 재수정 했습니다. 내부의 중요 필드를..

    스프링 프레임워크 - Junit Test

    스프링 프레임워크 - Junit Test

    개발 상황에서 테스트의 중요성을 부인할 사람은 없을 것이라 생각합니다. 그것도 처음부터 자잘하게 꾸준히 테스트하는 게 나중에 생각해보면 시간을 많이 절약해주죠. 이 포스트에서는 간단하게 Junit에 대해 다룹니다. Junit은 클래스의 제어권한을 넘겨받아 어플리케이션의 흐름을 제어하는 프레임워크입니다. 테스트에서 Junit 프레임워크가 요구하는 조건은 두가지입니다. 메소드가 public이로 사용되어야하고, @Test 라는 어노테이션이 붙어야합니다. Junit은 어노테이션을 적극적으로 활용하죠. 1번의 @Runwith은 Junit의 기능을 확장해서 스프링과 관련된 기능을 사용하게끔 해주는 어노테이션입니다.모든 클래스는 클래스의 작업을 실행해주는 main 클래스가 있습니다. Junit의 경우 그 main 클..

    이펙티브 자바 규칙 8 - equals 재정의 / 오버라이드 방법

    이펙티브 자바 규칙 8 - equals 재정의 / 오버라이드 방법

    참조 객체를 다룰 때 가장 많이 사용되는 메소드중 하나가 equals 메소드일 것입니다. 이 메소드는 객체간의 관계를 다루는만큼 재정의 시 주의를 요합니다. 이펙티브 자바 규칙 8 에서는 이 메소드를 정의할 때의 규약을 다루가 있습니다. 먼저 equals 메소드를 재정의 하지 않아도 되는 경우는 1. 각각의 개체가 고유한 값을 가질 때 기본형 값(value)로 이루어진 변수 대신 활성개체(active entity)를 나타내는 스레드로 이루어진 클래스는 단순한 실행단위이기 때문에 . 이런 클래스는 Object의 equals 메소드를 그대로 사용해도 됩니다. 2. 클래스에서 논리적 동일성 검사를 요구하지 않는다. 예로 java.util.Random 클래스가 있다. 이 클래스에서 equals 는 랜덤 객체가 ..

    이펙티브 자바 규칙 7 - 종료자 사용을 피하라

    저번 포스팅에서도 다루었지만 C,C++과 JAVA의 많은 차이 중 두드러지는 것 하나가 쓰레기 수집가(GC)입니다. C,C++ 에서는 잘 다루면 어마어마한 효율을 보여주지만, 못다루면 주된 버그의 원인이 되는주소값 관리를 자바에서는 GC 알고리즘을 통해 다루어 줍니다. 과거에는 자바의 쓰레기 수집가 알고리즘이 지금만큼 뛰어나지 못해문제가 된 적이 있지만, 지금은 많이 향상되었다고 합니다. public static void main(String[] args){ System.runFinalization(); System.gc(); }자바에서 GC를 호출하는 방법입니다. GC는 JVM마다 호출되는 시점이 다르고, 메모리의 여유상황에 영향을 받기 때문에제어하기 힘든데, 이 명령어를 쓰면 호출을 간접적으로 요청할..

    github - git bash 터미널 계정 변경

    github - git bash 터미널 계정 변경

    팀 프로젝트를 하다보면 기존에 github에서 로그아웃하고 다른 계정으로 작업하고 싶은 일이 생길 것입니다. 전 이 과정에서 많은 시간을 허비했으므로 (....) 기록을 남깁니다. 그 때 작업을 하는 방법을 포스트 하겠습니다. github에 새 repository를 만들고 기존에 하던 방식대로 진행하다보면 $ git push -u origin master 를 하면 remote: Permission to newaccount/projectname.git denied to oldaccount. fatal: unable to access 'https://github.com/newaccount/projectname.git/': The requested URL returned error: 403 newaccount..

    이펙티브 자바 규칙 6 - 유효기간이 지난 객체는 폐기하자

    이펙티브 자바 규칙 6 - 유효기간이 지난 객체는 폐기하자

    자바는 C나 C++과 다르게 쓰레기 수집가가 메모리를 관리해준다. 쓸모없어진 주소값을 자동으로 폐기해줘서 수동으로 관리해주는 C,C++ 보다 편하다고 할 수 있다. 하지만 자바에서도 간간히 주소값을 관리해주는 경우가 있다. public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e) { ensureCapacity(); elements[size++] = e; } public O..

    리눅스 - MariaDB 테이블 만들기, 데이터 넣기

    리눅스 - MariaDB 테이블 만들기, 데이터 넣기

    이 포스트에서는 마리아 db에서 간단하게 테이블을 만들고 데이터 입력을 해보겠다. 마리아db 자체가 mysql에서 빠져나온 소프트웨어고 sql문은 표준화된 형태가 있기에 다 같아서 다른 db와 차이가 없다. 먼저 데이터베이스를 만들어보자 show databases를 하면 데이터베이스를 확인할 수 있다. use shopping_db 로 테이블을 만들어보자 이 테이블은 10개의 글자를 저장할 수 있는 id(null 값이 되지 않고, 기본키 속성을 가진다) 5글자가 가능한 이름 int 값의 나이 5글자가 가능한 주소 를 저장하는 테이블이다. 구입 테이블도 한번 만들어보자 구입의 일련번호이다. 이는 중복되지 않아야 하므로 기본키 속성을 가지고자동으로 증가한다. 회원 번호 날짜(date의 오타다) 상품 이름 정보..

    이펙티브 자바 규칙 5 - 불필요한 객체 만들지 않기

    이펙티브 자바 규칙 5 - 불필요한 객체 만들지 않기

    객체를 관리하는 것은 메모리리를 효율적으로 사용하는 것으로 이어진다 때문에 불필요한 객체를 생성하지 않는 것이 좋다. String s = new String("이러지 말자"); String s = "이러자";위의 String은 스트링 객체를 생성하기 위해 문자열. 즉 스트링을 이용하고 있다. 객체를 생성하기 위해, 객체를 이용하고 있기에 메모리 낭비가 생긴다. 반복문 같은 곳에서 저런 코드를 사용하게 된다면 수백수천개의 객체가 생성될 수도 있다. 때문에 String 객체는 아래와 같은 방법으로 사용하는 것이 좋다. Boolean bool = new Boolean("true"); Boolean bool2 = Boolean.valueOf("true");Boolean 도 마찬가지이다. 생성자를 통하면 객체가 ..

    자바 선형 리스트 구현과 개념 (Linear List)

    자바 선형 리스트 구현과 개념 (Linear List)

    선형 리스트는 자료구조의 기본이 되는 구조이다. 배열과 같이 연속되는 기억장소에 저장한다. 연접리스트(Dense List) 축자 구조(Sequential Structure) 라고도 한다. 자료의 개수가 n개일 때 자료 추가시 이동 횟수는 n+1/2 이고, 삭제시에는 n-1/2 이다,. 가장 간단하고, 접근 속도가 빠르다. 기억장소를 연속적으로 배정받기에 밀도가 1로서 이용효율은 가장 좋다. 하지만 자료의 양이 거대해질 때, 자료의 이동 횟수가 기하급수적으로 늘어나는 단점이 있다. 그림으로 보자 그림판 편집이라 볼품없지만 가장 왼쪽에서 5와 10 사이에 20을 추가하면 뒤의 숫자들이 한칸 씩 밀린다. 두번째 블록에서는 값을 빼는데 중간에 값을 빼면 뒤의 값들이 한 칸 씩 당겨진다. 이를 자바 코드로 구현해..

    이펙티브 자바 규칙 4 - 객체 생성은 private 생성자로 막자

    때로는 정적 필드나 메소드로만 구성된 클래스를 설계할 때가 있다. 대표적 예로는 java.lang.Math나 java.util.Arrays 이런 클래스는 객체를 생성할 목적으로 만들어 진 것이 아니다. 때문에 객체 생성을 막을 필요가 있다. 추상클래스로 만들어놔도 소용이없다. 하위클래스에서 상속 할 시객체생성이 가능해지기 때문이다. 가장 확실한 방법이 생성자를 private 로 만드는 것이다. private NutrtionFacts{ throw new AssertionError(); }이런 방식으로 생성자를 설정해두면 클래스 객체 생성을 봉쇄할 수 있다.

    이펙티브 자바 규칙 3 - 싱글톤

    이펙티브 자바 규칙 3 - 싱글톤

    싱글톤이란? 클래스의 인스턴스를 단일화해서 언제 어떤 때에 불리더라도 인스턴스를 새로 만드는 일 없이 같은 주소를 리턴해주는 디자인 방법을 이야기 한다. 이펙티브 자바3에서는 싱글톤 패턴의 종류에 대해서 적고 있다. 1. Public final 필드 이용public class NutrtionFacts { private String name = "name"; public static final NutrtionFacts INSTANCE = new NutrtionFacts(); private NutrtionFacts(){} public void setName(String name) { this.name = name; } public String getName() { return name; } }public c..

    리눅스 - MariaDB 설치, 계정생성, 로그인

    리눅스 - MariaDB 설치, 계정생성, 로그인

    이 포스트에서는 마리아DB 설치를 해보겠다 먼저 mariadb-libs를 지우고 새로깐다. 지우고 클라이언트, 공통, 서버 를 새로 깐다. mysql로 재시작을 해주고 chkconfig mysql on 을 해주자 맨 밑에거만 해주자 빨간줄을 잘못그엇다. firewall-config 설정가서 영구적 체크 해제 - mysql 체크 - 옵션 다시불러오기 설치가 완료됬으면 mysql -u root -p 를 해보자 현재 패스워드가 지정이 안되어있다. mariadb를 빠져나온 다음 mysqladmin -u root password '1234' 로 비밀번호를 설정해주자 그리고 접속 윈 클라에서 테스트를 해볼것이다. www.mariadb.org 에서 wind 용 클라를 다운받아서 설치 클라만 테스트 할것이기에 클라만 ..

    리눅스 - 센드메일 서버 구현 2

    리눅스 - 센드메일 서버 구현 2

    1 포스트에서는 센드메일 서버 작업을 해주었다. 이제는 구체적으로 들어가서 설정을 해보자 yum -y install sendmail-cf dovecot 먼저 센드메일 내에서 메일을 보내고 받기 위해서는 이 두개가 필요하다. 이 밑의 네가지 설정의 구체적인 역할은 참고서를 봐도 동영상 강의를 봐도 설명되어있지 않다. 그냥 따라서 작업했다. makemap hash /etc/mail/access < /etc/mail/access 방금 설정을 적용하기 위해서 필요하다 다음은 유저를 만들어주자 이 센드메일에서 메일계정을 사용할 유저이다. 그리고 sendmail을 재시작하자 그리고 여기서 테스트를 할거니 systemctl restart namedsystemctl restart dovecot 도 같이 해주자. 이 작..