목록자바 (17)
필기노트
보호되어 있는 글입니다.
File 클래스는 데이터의 입출력 이외에, 파일 또는 디렉터리와 관련된 일을 처리를 위해 디자인 된 클래스이다. import java.io.File; class FileMove { public static void main(String[] args) { File myFile = new File("C:"+File.separator+"MyJava"+File.separator+"my.bin");// 7행 if(myFile.exists()==false)// 8행 { System.out.println("원본 파일이 준비되어 있지 않습니다."); return; } File reDir = new File("C:"+File.separator+"YourJava");// 14행 reDir.mkdir();// 15행 Fil..
Java 소켓 통신(Socket)을 사용하는 이유 먼저 자바에서 소켓 통신은 C 또는 C++ 언어로 구현된 프로젝트와의 통신에 많이 사용됩니다. 이유는 Java와 C의 데이터 개념이 다르기 때문인데요. C에서는 구조체를 사용하는데 반해서 Java에는 구조체가 없습니다. 이처럼 Java의 Object 구조를 C에서 이해하지 못하고 C의 구조체를 자바에서 이해하지 못하기 때문에 서로 통신을 위해서는 byte 단위로 정보를 주고받아야 합니다. (Socket을 사용한 전문 통신) Http 통신과 Socket 통신의 차이점 - 단방향 통신인 Http 통신 Http 통신은 Client의 요청(Request)이 있을 때만 서버가 응답(Response)하여 해당 정보를 전송하고 곧바로 연결을 종료하는 방식입니다. Cl..
1. static 변수 class InsCnt { static int instNum = 0; public InsCnt() { instNum++; System.out.println("인스턴스 생성 : "+instNum); } } class ClassVar { public static void main(String[] args) { InsCnt cnt1 = new InsCnt(); InsCnt cnt2 = new InsCnt(); InsCnt cnt3 = new InsCnt(); } } static으로 선언된 변수는 변수가 선언된 클래스의 모든 인스턴스가 공유하는 변수이다. 즉 인스턴수 변수가 인스턴스 별로 각각 존재하는 변수라면, static 변수는 딱! 하나만 존재해서 모든 인스턴스가 공유하는 형태의 변..
1. 정보은닉이란? 인스턴수 변수에 private 선언을 하는 것 FruitSeller seller = new FruitSeller(0, 30, 1500);// 판매수익, 보유사과, 사과가격 FruitBuyer buyer = new FruitBuyer(10000);// 보유금액 seller.myMoney += 500;// 돈 500원 내고! buyer.myMoney -= 500; seller.numOfApple -= 20;// 사과 20개를 가져가는 꼴! buyer.numOfApple += 20; 위의 예제처럼 외부에서 인스턴수 변수에 직접 접근이 가능해서 생길 수 있는 문제가 있다. 인스턴수 변수가 private으로 선언되면, 해당 변수가 선언된 클래스 외부에서는 접근이 불가능해지고, 메소드가 유일한 ..
생성자는 인스턴스 생성시 딱 한번 호출되는 메소드로써, 인스턴스 변수의 초기화를 목적으로 정의되는 메소드이다. 생성자가 없는 경우의 문제점은 1. 클래스의 인스턴스가 생성하고 난 다음에 초기화를 해야한다. 즉 두 줄에 걸쳐서 문장을 구성해야 하나의 인스턴스 생성을 완료할 수 있다. 2. 초기화가 이뤄지지 않은 final 변수는 한 번의 초기화 기회를 갖는데 인스턴스 메소드 내에서 final 인스턴스 변수의 값을 초기화하는 행위는 허용되지 않는다. 인스턴스 메소드는 두 번 이상 호출이 가능하기 때문이다. 생성자가 되기 위해서는 다음의 조건을 갖춰야 한다. 1) 클래스의 이름과 동일한 이름의 메소 2) 반환형이 선언되어 있지 않으면서, 반환하지 않는 메소드 class FruitSeller { int numO..
class FruitSeller { int numOfApple=20; int myMoney=0; final int APPLE_PRICE=1000; public int saleApple(int money) { int num=money/APPLE_PRICE; numOfApple-=num; myMoney+=money; return num; } public void showSaleResult() { System.out.println("남은 사과 : " + numOfApple); System.out.println("판매 수익 : " + myMoney); } } class FruitBuyer { int myMoney=5000; int numOfApple=0; public void buyApple(FruitSelle..
class FruitBuyer { int myMoney = 5000; int numOfApple = 0; public void buyApple(FruitSeller seller, int money) { numOfApple += seller.saleApple(money); myMoney -= money; } public void showBuyResult() { System.out.println('현재 잔액 : ' + myMoney); System.out.println('사과 개수 : ' + numOfApple); } } 우리는 FruitBuyer라는 클래스를 정의하였다. 그렇다면 이 클래스 안에 존재하는 변수에 접근하고, 클래스 안에 존재하는 메소드를 호출하는 것이 가능할까? 그러나 이들은 ‘실체(=객체)..
1. final 한번 값이 결정된 이 변수의 값은 변경이 불가능하다! class FruitSeller { final int APPLE_PRICE = 1000; // 사과의 가격은 변경되지 않는다는 가정이 들어있다. int numOfApple = 20; int myMoney = 0; public int saleApple(int money) { int num = money / APPLE_PRICE; numOfApple -= num; myMoney += money; return num; // 판매한 과일의 수를 반환 } public void showSaleResult() { System.out.println('남은 사과 : ' + numOfApple); System.out.println('판매 수익 : ' +..
목차 1. abstract 클래스는 인스턴스 생성이 불가능하다. 2. interface 3. 클래스 상속과 인터페이스 구현의 차이 1. abstract 클래스는 인스턴스 생성이 불가능하다. class Friend { . . . . // 앞부분 생략 public void showData() { System.out.println("이름 : "+name); System.out.println("전화 : "+phoneNum); System.out.println("주소 : "+addr); } public void showBasicInfo() {}// 19행 } Friend 클래스는 인스턴스는 생성하면 안 되는, 그야말로 상속의 관계를 형성하기 위한 상위 클래스였다. 따라서 만에 하나라도 Friend my fren ..