language/JAVA
-
자바 명명 규칙(Java naming conventions)language/JAVA 2019. 3. 13. 22:51
Adventage of naming conventions in JAVA 다른 개발자들과 공유하는 명명 규칙을 사용함으로써 가독성을 높이게 됩니다. 코드가 의미하는 바를 명확하고 확실하게 전달하게 됩니다. Naming Conventions class : 대문자로 시작하고 '명사' 입니다. ex) String, Integer, Systeminterface : 대문자로 시작하고 '형용사' 입니다. ex) Runnablemethod : 소문자로 시작하고 '동사' 입니다. ex) println()variable : 소문자로 시작합니다.pakage : 소문자로 시작합니다.constant : 대문자입니다.
-
Collectionlanguage/JAVA 2019. 1. 30. 17:47
자바가 가지고 있는 컬렉션은 상황에 따라 필요한 여러가지 자료구조를 제공합니다. 이를 이용해 손 쉽게 대용량의 데이터를 관리할 수 있습니다. 컬렉션 역시 객체이고, 컬렉션 인터페이스를 구현하고 있습니다. 컬렉션 인터페이스를 구현하지는 않지만 map 역시 자바의 컬렉션 프레임워크의 일부로 간주되고 있습니다. 컬렉션 프레임워크를 간단하게 살펴보겠습니다. List 인터페이스를 구현한 A클래스는 모두 순서를 가지고 있습니다. 따라서 순서가 중요한 경우 list를 사용합니다. (vector와 arraylist 차이는 동기화, null값 허용 여부) Set은 오로지 값만을 가지고 인덱스나 키 값을 가지고 있지 않습니다. 때문에 유일성이 중요할 때 사용합니다. Map은 키값을 가지고 있습니다. 순서는 중요하지 않지만..
-
제네릭, Genericlanguage/JAVA 2019. 1. 30. 17:43
제네릭은 클래스 내부에서 사용할 데이터타입을 외부에서 지정하는 기법을 의미합니다. 코드에서 Person 클래스 내부에 선언된 변수 info 는 아래 코드에서 객체를 생성 할 때 지정해 주는 String이 된다. 당연히 객체마다 다른 데이터타입을 지정해서 사용할 수 있게 된다. 이 때 유의해야 할 것은 제네릭에서는 참조형 변수 타입만을 사용할 수 있다는 것입니다. 원시 변수 타입을 사용할 경우 wrapper 클래스를 이용해야 합니다. 제네릭을 하나만 사용할 수 있는 것은 아닙니다. 두 개 이상 사용할 수도 있고 클래스가 아닌 메소드에도 적용할 수 있습니다. 또 제네릭을 사용되는 데이터 타입을 특정 클래스의 자식클래스로 제한 시킬 수도 있습니다. 위 코드에서 중요한 부분은 T extends Info 입니다...
-
동기화 synchronizedlanguage/JAVA 2019. 1. 30. 17:38
그런데 두 개 이상의 스레드가 객체에 있는 하나의 데이터에 접근할 때 문제가 발생할 수 있습니다. (병행성문제) 위 코드를 보면 Runnable이 구현된 Banker 클래스에서 BankAccount 객체에 잔고가 0보다 클 때만 withdraw 메소드를 호출합니다. 하지만 메인 메소드에서 오른쪽과 같은 코드를 구현하고 나면 잔고는 -100이 됩니다. 두 스레드에서 모두 같은 BankAccount 인스턴스에 접근하고 있기 때문에 생긴 문제입니다. one 스레드에서 잔고를 확인후 sleep 메소드가 호출되어 대기상태가 되기 때문에 잔고가 변하지 않았습니다. two 스레드 역시 잔고를 확인하는 시점에서는 잔고가 100이기 때문에 결국 withdraw 메소드가 두 번 실행되어 잔고가 -100이 된 것입니다. 이..
-
스레드 Threadlanguage/JAVA 2019. 1. 30. 17:36
때로는 애플리케이션이 한 번에 두가지 이상의 일을 처리해야 할 때가 있습니다. 자바에서는 언어 자체에 다중 스레딩 기능이 내장되어 있습니다. 멀티 스레드를 이용하게 되면 한 번에 두 가지 이상의 일을 처리할 수 있게 됩니다. 다른 작업이 끝날 때 까지 기다릴 필요가 없기 때문에 응답시간을 개선 시키고 유휴자원 발생을 줄임으로서 경제성을 높일 수 있습니다. 하지만 교착상태가 발생할 수 있고 스레드 스케줄에 따라 오히려 실행시간이 지연되는 경우도 있을 수 있습니다. 여러개의 스레드가 있다는 것은 스택이 여러 개 있다는 것입니다. 그림에서처럼 메인스레드에서 호출된 각각의 다른 스레드들이 있고 그 스레드 들 마다 각각 스택을 가지고 있습니다. 멀티 스레드 라는 것은 이런 식으로 여러개의 호출 스택을 만드는 것과..
-
네트워크, 소켓language/JAVA 2019. 1. 30. 17:32
네트워크 통신은 응용-전송-인터넷-물리 계층을 통해서 이루어지게 됩니다. 하지만 이런 일련의 전송에 관한 설정을 전부 다 신경 쓰지는 않습니다. 대신 우리는 Socket 객체를 이용해서 저수준에서 일어나는 복잡한 일들을 무시하고 쉽게 데이터를 전송할 수 있습니다. 네트워크 통신을 통해 데이터를 보낼 때는 보내는 곳의 위치를 나타내는 IP주소와 어떤 애플리케이션에서 사용하는 정보인지를 나타내는 포트 번호가 필요합니다. 소포를 보낼 때 주소와 이름을 쓰는 것 처럼 네트워크 통신에서도 IP주소와 포트번호를 써 줘야 합니다. 소포를 보낼때 보내는 사람과 받는 사람의 주소와 이름을 모드 쓰는 것 처럼 보내는 쪽의 IP주소와 포트번호도 함께 전달해 줍니다. 포트번호는 실제로 어떤 응용프로그램에서 사용하는지를 나타내..
-
serialization(직렬화)language/JAVA 2019. 1. 23. 14:01
마지막으로 우리가 만든 객체를 저장하는 것에 대해 생각해 보도록 하겠습니다. 객체에서 저장되어야 할 것은 객체의 현재 상태일 것입니다. 그리고 그 객체의 상태를 나타내는것은 인스턴스 변수 입니다. 자바는 직렬화(serialization)을 이용해서 객체의 인스턴스변수들을 byte 형태로 변환해서 저장하게 됩니다. 이 byte 형태의 데이터를 다시 객체로 바꾸는 것을 역직렬화라고 합니다. 사실 직렬화 하지 않고 파일을 텍스트 형식이나 다른 방법으로 저장할 수도 있습니다. 하지만 직렬화를 이용하게 되면 아무리 복잡한 클래스라도 기본 조건만 지키면 쉽게 직렬화를 할 수 있고 자바 애플리케이션에서 쉽게 역직렬화 할 수 있다는 장점이 있습니다. 그렇게 역직렬화가 되게 되면 다시 원래의 객체처럼 쉽게 사용할 수 있..
-
GUI / innerclass(내부클래스)language/JAVA 2019. 1. 23. 13:56
그래픽 사용자 인터페이스(graphical user interface, GUI)는 사용자가 편리하게 사용할 수 있도록 입출력 등의 기능을 알기 쉬운 아이콘 따위의 그래픽으로 나타낸 것입니다. 이와 반대 되는 개념으로는 Command Line에 직접 명령어를 입력해서 조작하는 CLI(Command-line Interface) 또는 CUI(Character User Interface) 가 있습니다. 자바에서도 역시 GUI를 이용해 애플리케이션을 만들 수 있습니다. 가장 유명한 것은 awt, swing(+javafx) 같은 툴킷이고 책(head first java)에서는 주로 swing을 다루고 있습니다. 그래픽 인터페이스에 대해 이해하기 위해서 먼저 이벤트와 리스너의 개념에 대해 알아보고 가겠습니다. 자바에..