목록콤퓨타 왕기초/Java (12)
파게로그
package practice.bitmask; public class BitwiseOperation { public static void print() { System.out.println(); } public static void print(Object line) { System.out.println(line); } public static void print(Object linePart1, Object linePart2) { System.out.println(linePart1+": "+linePart2); } public static void main(String[] args) { print("NOT, AND, OR, XOR"); // 19 = 10011(2), 114 = 1110010(2) prin..
코드 재사용은, 소스 코드가 아니라 배포 코드(binary code)를 재사용하는 것을 말한다. 배포(수작업) 1. 컴파일: Exam.class 2. 압축: Exam.zip 3. jar(자바를 위한 압축파일이라는 의미로, 확장자를 바꾸면 된다): Exam.jar 배포(IDE) 프로젝트 오른쪽 클릭 -> Export -> General > Archive File (소스코드 배포할 때) (선택) Java > JAR file(압축할 때 컴파일 후 jar로 압축) -> 원하는 파일 선택 -> 디렉터리와 파일 이름(예: examlib.jar) -> Finish 갖다쓰기 (수동) javac -cp "D:\java\examlib.jar" Program.java 새 프로젝트 오른쪽 클릭 > Build Path > Co..
Has A 관계 Has A 관계은, Has A 상속이라고도 하지만 사실상 상속도 아닌 것과 같아서 Has A 관계라고도 곧잘 불린다. 상속에 대해서는 잘 언급되지 않는 개념이지만, 이렇다고 알고 있으면 된다. Python에서는 compositoin으로 def foo(bar):과 같이 사용되고, Java에서는 특별한 문법 없이 포함 관계로서 설명할 수 있다. 캡슐들은 다른 캡슐을 사용하거나, 다른 캡슐에 의해 사용되는 관계를 가지고 있는데, 어떤 캡슐에 다른 캡슐을 포함하는 것을 Has A 관계라고 할 수 있다. Car 클래스와 Engine 클래스가 있을 때, Car 클래스 내에서 Engine 클래스의 인스턴스를 생성한다면 Car Has A Engine이 된다. 이 때 Car 클래스 내에서 Engine 클..
초기화를 위한 특별한 무명의 함수로서, 다음의 조건을 만족한다. 1. 객체가 생성되자마자 무조건, 제일 먼저 실행된다. 2. 생성될 때, 단 한 번만 실행된다. 함수의 이름이 없으며, 정의할 때의 함수명은 초기화할 객체를 한정하기 위한 형식적인 명칭일 뿐이다. 리턴 타입이 정의되지 않는다. 생성자도 오버로딩이 가능하다. 기본 생성자는 컴파일러가 자동으로 만든다. 참조변수가 실체화될 때는 null이, 기본 자료형(값 변수)이 실체화될 때는 0으로 초기화된다. 단, 기본 생성자가 없는 상태로 오버로드만 했다면 기본 생성자를 사용할 수 없게 된다. 그러면 상속에서 여러가지 난제에 마주치게 된다. class Student { String name; int id; // 생성자 overloading public S..
같은 기능을 하는 메소드가 다른 인자를 받을 수 있도록 한다. 아래의 코드에서는, print(int n)만으로 print()를 커버할 수 있지만, 한 번만 구현해두면 메서드의 사용자는 불필요한 인자 전달을 하지 않아도 된다. 다만 실제로는, 기본 메서드는 print()이며 print(int n)이 '추가 기능이 구현되었다'고 할 수 있는, 오버로드된 메서드이다. 구현할 때에는, 인자가 많은 메서드를 구현한 후 나머지는 그 메서드를 호출하는 방식을 이용한다. package ex.method.overloading; import java.util.Scanner; class Student { String name; int age; double score; public Student(String name, int..
상수형 변수 선언 /* const가 아니라 final이다! */ final int COKE_VOLUME = 500; final String GREETING = "Hello, world!"; 입력 종료될 때까지 받기 import java.util.Scanner; import java.util.ArrayList; import java.util.Iterator; class Main { public static void foo(String str) { Scanner sc = new Scanner(str); ArrayList arr = new ArrayList(); while (sc.hasNext()) { int n = sc.nextInt(); arr.add(n); } System.out.println("for문..
C에서처럼 Java에서도 goto문이 있었나보다. 지금은 break \[label\];과 같이 label 개념이 있어서, 반복문을 한 번에 빠져나올 수 있다. 이걸 모르고 지금까지 flag 같은 변수를 만들어 썼으니... 레퍼런스를 꼼꼼히 읽지 않았기에, 전적으로 내 잘못이다. package ex4.iter.label; import java.util.Scanner; public class Ex4 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); outer: // label while (true) { // display menu System.out.println("1. 인사받기"); System.out.printl..
스트림(Stream)이란? 여기서 말하는 스트림은 Java 8에서 추가된 Stream API와는 무관하다. 스트림이란, 연속된 데이터가 단방향으로 흐름을 추상화한 것이다. 문자 그대로 '물의 흐름'을 떠올리면 쉬운데, 출발지로부터 도착지까지의, 방향이 하나로 일정한 흐름이다. Java에서는 입출력 스트림 외에도 바이트 기반 스트림, 보조 스트림, 문자 기반 스트림이 제공된다. 스트림은 마치 큐(queue)처럼 FIFO(First In, First Out) 구조를 가져서, 스트림 속 데이터의 순서를 바꿀 수 없다. 입출력 스트림이란? Java에서는 입출력을 처리하기 위한 입출력 스트림을 제공하고 있다. InputStream의 경우 출발지는 키보드, 마우스와 같은 Input 장치나 다른 프로그램 등이고 도착..