Data Scientist 옌

매일 발전하는 IT문제해결사

국비지원교육 (22.01-22.07)/강의노트

22-02-17(목) 016일차 [Java] 인터페이스, 이클립스 설치 및 사용 방법, ArrayList

옌炎 2022. 4. 18. 14:33
728x90

수업내용


1교시 (09:30-10:20)

  • 인터페이스
package a.b.c.ch2.aaaa;

/*
	인터페이스 interface
		1. 생성자를 가질 수 없다.
		2. new 연산자로 인스턴스할 수 없다.
		3. 함수는 모두 추상함수이다. abstract 키워드가 생략된 형태이다.
		   함수는 굳이 abstract 키워드를 사용하지 않는다.
		4. 변수는 모두 상수이다.
		   변수는 굳이 static final 키워드를 사용하지 않는다.

		5. static 함수 가능
		6. default 함수 가능
*/

public interface Exam_Inter {
	
	// public String str;
	/*
		C:\00.KOSMO108\10.JExam\ch2>javac -d . Exam_Inter.java
		Exam_Inter.java:13: error: = expected
				public String str;
								 ^
		1 error
	*/

	public /* static final 생략된 것이다.  */ String str = "난 상수이다";
	public static final String STR = "난 상수이다";

	// 생성자
	/*
	public Exam_Inter() {
	
	}
	*/

	// 인터페이스 클래스 new 연산자로 인스턴스하기
	// Exam_Inter ei = new Exam_Inter();
	public /* abstract 키워드 생략 */ void aM();
	public abstract void bM();
}

/*
package a.b.c.ch2.aaaa;
public interface Exam_Inter {

}

C:\00.KOSMO108\10.JExam\ch2>javap a.b.c.ch2.aaaa.Exam_Inter
Compiled from "Exam_Inter.java"
public interface a.b.c.ch2.aaaa.Exam_Inter {
}
*/

/*
public interface Exam_Inter {
	// 인터페이스 클래스 new 연산자로 인스턴스 하기 
	Exam_Inter ei = new Exam_Inter();
}

C:\00.KOSMO108\10.JExam\ch2>javac -d . Exam_Inter.java
Exam_Inter.java:18: error: Exam_Inter is abstract; cannot be instantiated
        Exam_Inter ei = new Exam_Inter();
                        ^
1 error
*/

2교시 (10:30-11:20)

  • Exam_Inter_1
package a.b.c.ch2.aaaa;

public interface Exam_Inter_1 {
	
	public /* abstract 키워드 생략 */ void aM();
	public abstract void bM();
	public abstract void cM();
}
  • Exam_Inter_1_Class
package a.b.c.ch2.aaaa;

/*
	상속 : 부모 자식
	부모 : Exam_Inter_1 인터페이스 클래스
	자식 : Exam_Inter_1_Class 클래스
*/

/*
	상속관계에서 인스턴스하는 방법은 4가지가 있다.
	2번 사용하기
	1. 자식클래스 참조변수 = new 자식클래스()
	2. 부모클래스 참조변수 = new 자식클래스()

	3, 4번은 해당사항 없음
	3. 부모클래스 참조변수 = new 부모클래스()
	4. 자식클래스 참조변수 = new 부모클래스();
*/

public class Exam_Inter_1_Class implements Exam_Inter_1 {
	
	@Override
	public /* abstract 키워드 생략 */ void aM() {
		System.out.println("Exam_Inter_1 인터페이스에서 오버라이딩해서 aM() {} 블록을 만들고 재정의하는 함수이다.");
	}
	
	@Override
	public /* abstract */ void bM() {
		System.out.println("Exam_Inter_1 인터페이스에서 오버라이딩해서 bM() {} 블록을 만들고 재정의하는 함수이다.");
	}

	// 인터페이스 클래스에서 가져온 함수를 재정의해야 한다.
	// 재정의하라는 것은 {} 블록 브레이스를 만들라는 뜻이다.
	// {} 블록 내부에 원하는 내용을 기술한다.
	// 구현체를 만든다. 실현한다. Implementation
	// 오버라이딩 한 함수에서 abstract 키워드를 제거하고 {} 블록을 만든다.
	// public abstract void cM();

	@Override
	public /* abstract */ void cM() {
		System.out.println("Exam_Inter_1 인터페이스에서 오버라이딩해서 cM() {} 블록을 만들고 재정의하는 함수이다.");
	}
}
  • Exam_Inter_1_Test
package a.b.c.ch2;

import a.b.c.ch2.aaaa.Exam_Inter_1;
import a.b.c.ch2.aaaa.Exam_Inter_1_Class;

public class Exam_Inter_1_Test {
	
	public static void main(String args[]) {
	
		// 2. 부모클래스 참조변수 = new 자식클래스
		Exam_Inter_1 ei1 = new Exam_Inter_1_Class();
		System.out.println("ei1 참조변수 주소값 >>> : " + ei1);
		// System.out.println("ei1.aM() >>> : " + ei1.aM());
		/*
		C:\00.KOSMO108\10.JExam\ch2>javac -d . Exam_Inter_1_Test.java Exam_Inter_1_Class.java Exam_Inter_1.java
		Exam_Inter_1_Test.java:13: error: 'void' type not allowed here
                System.out.println("ei1.aM() >>> : " + ei1.aM());
                                   ^
		1 error
		*/
		ei1.aM();
	}
}
  • 위의 Exam_Inter_1_Test 코드 실행
javac -d . Exam_Inter_1*.java
java a.b.c.ch2.Exam_Inter_1_Test

3교시 (11:30-12:20)

  • Exam_Inter_1
package a.b.c.ch2.aaaa;

// 인터페이스하고 인터페이스를 상속할 때는 extends 키워드를 사용한다.
// 클래스에 인터페이스를 상속시킬 때 implements 키워드를 사용한다.
public interface Exam_Inter_1 extends Exam_Inter_2 {
	
	public /* abstract 키워드 생략 */ void aM();
	public abstract void bM();
	public abstract void cM();
//	public void dM();
}
  • Exam_Inter_2
package a.b.c.ch2.aaaa;

public interface Exam_Inter_2 {

	public void dM();
}
  • Exam_Inter_3
package a.b.c.ch2.aaaa;

public interface Exam_Inter_3 {

	public void eM();
}
  • Exam_Inter_1_Class
package a.b.c.ch2.aaaa;

/*
	상속 : 부모 자식
	부모 : Exam_Inter_1 인터페이스 클래스
	자식 : Exam_Inter_1_Class 클래스
*/

/*
	상속관계에서 인스턴스하는 방법은 4가지가 있다.
	2번 사용하기
	1. 자식클래스 참조변수 = new 자식클래스()
	2. 부모클래스 참조변수 = new 자식클래스()

	3, 4번은 해당사항 없음
	3. 부모클래스 참조변수 = new 부모클래스()
	4. 자식클래스 참조변수 = new 부모클래스();
*/

public class Exam_Inter_1_Class implements Exam_Inter_1, Exam_Inter_3 {
	
	@Override
	public /* abstract 키워드 생략 */ void aM() {
		System.out.println("Exam_Inter_1 인터페이스에서 오버라이딩해서 aM() {} 블록을 만들고 재정의하는 함수이다.");
	}
	
	@Override
	public /* abstract */ void bM() {
		System.out.println("Exam_Inter_1 인터페이스에서 오버라이딩해서 bM() {} 블록을 만들고 재정의하는 함수이다.");
	}

	// 인터페이스 클래스에서 가져온 함수를 재정의해야 한다.
	// 재정의하라는 것은 {} 블록 브레이스를 만들라는 뜻이다.
	// {} 블록 내부에 원하는 내용을 기술한다.
	// 구현체를 만든다. 실현한다. Implementation
	// 오버라이딩 한 함수에서 abstract 키워드를 제거하고 {} qmffhrdmf aksemsek.
	// public abstract void cM();

	@Override
	public /* abstract */ void cM() {
		System.out.println("Exam_Inter_1 인터페이스에서 오버라이딩해서 cM() {} 블록을 만들고 재정의하는 함수이다.");
	}

	// 재정의해야 한다.
	@Override
	public void dM() {
		System.out.println("Exam_Inter_2 인터페이스에 있는 추상함수이다.");		
		System.out.println("Exam_Inter_1 인터페이스에 extends 키워드로 인터페이스 상속을 해주었다.");
		System.out.println("Exam_Inter_1 인터페이스에 dM() 함수를 오버라이딩해주었다.");
		System.out.println("Exam_Inter_1_Class 클래스에서 오버라이딩해서 재정의했다.");
	}	

	// 재정의해야 한다.
	@Override
	public void eM() {
		System.out.println("Exam_Inter_3 인터페이스에 있는 추상함수이다.");
	}

}
  • Exam_Inter_1_Test
package a.b.c.ch2;

import a.b.c.ch2.aaaa.Exam_Inter_1;
import a.b.c.ch2.aaaa.Exam_Inter_3;
import a.b.c.ch2.aaaa.Exam_Inter_1_Class;

public class Exam_Inter_1_Test {
	
	public static void main(String args[]) {
	
		// 2. 부모클래스 참조변수 = new 자식클래스
		Exam_Inter_1 ei1 = new Exam_Inter_1_Class();
		System.out.println("ei1 참조변수 주소값 >>> : " + ei1);
		// System.out.println("ei1.aM() >>> : " + ei1.aM());
		/*
		C:\00.KOSMO108\10.JExam\ch2>javac -d . Exam_Inter_1_Test.java Exam_Inter_1_Class.java Exam_Inter_1.java
		Exam_Inter_1_Test.java:13: error: 'void' type not allowed here
                System.out.println("ei1.aM() >>> : " + ei1.aM());
                                   ^
		1 error
		*/
		ei1.aM();
		ei1.bM();
		ei1.cM();
		ei1.dM();
		// ei1.eM();

		Exam_Inter_3 ei3 = new Exam_Inter_1_Class();
		System.out.println("ei3 참조변수 주소값 >>> : " + ei3);
		ei3.eM();
	}
}
  • 위의 Exam_Inter_1_Test 코드 실행
javac -d . Exam_Inter_*.java
java a.b.c.ch2.Exam_Inter_1_Test

4교시 (12:30-13:20)

  • Exam_Inter_1_Test에서 Exam_Inter_3를 불러와서 ei3으로 선언하는 이유
  • DD
package aaa.bb;

public interface DD {

	public void dd();
}
  • A_Test
package aaa;

import aaa.bb.DD;

class CC implements DD {

	public void dd() {
		System.out.println("dd");
	}
}

class BB extends CC {

}

class AA {

}

public class A_test {
	
	public static void main(String args[]) {
	
	}
}
  • 위의 A_Test 코드 실행
javac -d . A_test.java DD.java
java aaa.A_test

5교시 (14:30-15:20)

  • Ex_MessageInterface
package a.b.c.ch2;

public interface Ex_MessageInterface {

	public void sayHello(String name);
}
  • Ex_MessageKorImpl
package a.b.c.ch2;

public class Ex_MessageKorImpl implements Ex_MessageInterface {

	@Override
	public void sayHello(String name) {
		System.out.println("안녕하세요, " + name + "!!");
	}
}
  • Ex_MessageEngImpl
package a.b.c.ch2;

public class Ex_MessageEngImpl implements Ex_MessageInterface {

	@Override
	public void sayHello(String name) {
		System.out.println("Hello, " + name + "!!");
	}
}
  • Ex_MessageTest
//package
package a.b.c.ch2;

// import

// class 선언
public class Ex_MessageTest {
	// 상수
	// 멤버변수
	// 생성자

	// 함수

	// main() 함수 : 프로그램 시작점
	public static void main(String args[]) {
		//TODO Auto-generated method stub.

		Ex_MessageInterface eme = new Ex_MessageEngImpl();
		eme.sayHello("Hong Gil Dong");

		Ex_MessageInterface emk = new Ex_MessageKorImpl();
		emk.sayHello("홍길동");
			
	}
}
  • 위 Ex_MessageTest 코드 실행
javac -d . Ex_Message*.java
java a.b.c.ch2.Ex_MessageTest

6교시 (15:30-16:20)

  • IDE
인터페이스 
--------------

추상클래스
--------------

상속
--------------


자바 
jdk
편집기
콘솔
API 



통합 개발 환경 IDE (Integrated Development Environment) 
	: jdk, 편집기, 콘솔, API 이것을 GUI 환경에서 다 지원하는 것
----------------------------------------------------
	이클립스 eclipse 비상용
	인텔리제이 IntelliJ 인텔리제이 상용
	비쥬얼 스튜디오 Visual Studio
	안드로이드 스튜디오 Android Studio
	파이참 Pycharm 
	.... 등등 


이클립스 eclipse
---------------------------------------------------
2001년 IBM VisualAge용 소프트웨어 개발 툴로 만들어졌으나 
개발 도중 관련 소스 등을 모조리 공개하는 자유 소프트웨어가 되었고 
이것이 '이클립스' 란 이름으로 세상에 선보임

초창기(Hellos 까지)
Helios(2005년)

2006년 부터 목성의 위성 또는 관련된 인물의 이름을 임의로 채용 
Callisto(2006년)
Europa(2007년)
Ganymade(2008년)
Galileo(2009년)

알파벳 네이밍 1기(천문학 네이밍, Mars 까지)
Helios(2010년)
Indigo(2011년)
Juno(2012년)
Kepler(2013년)
Luna(2014년)
Mars(2015년)

알파벳 네이밍 2기(원자론 네이밍, Neon 부터 Photon 까지)
Neon(2016년)
Oxygen(2017년)
Photon(2018년)

연도-월 버저닝
Eclipse 2018-09(4.9) ~ Eclipse 2019-12(4.14)
Eclipse 2020-03(4.15)

Eclipse 2020-06(4.16) <====
	web, java : Eclipse IDE for Enterprise Java Developers
	java : Eclipse IDE for Java Developers

Eclipse 2020-09(4.17)
Eclipse 2020-12(4.18)
Eclipse 2021-03(4.19)
Eclipse 2021-06(4.20)
Eclipse 2021-09(4.21)
Eclipse 2021-12(4.22)
  • 총 파일 2개 설치
    • eclipse.org 에서 Eclipse IDE 2020-06 R Packages 중에 Eclipse IDE for Enterprise Java Developers 중 운영체제에 맞는 것 설치
      • eclipse-jee-2020-06-R-win32-x86_64.zip
    • Eclipse Installer 2020-06-R 설치
      • mirror : 빨리 다운 받을 수 있을 것 같은 곳으로 선택
      • eclipse-inst-win64.exe

7교시 (16:30-17:20)

  • Eclipse 다운로드 및 코드 생성 후 실행
    • eclipse-inst-win64.exe 파일 클릭하여 C:\00.KOSMO108\10.JExam\10.JavaTest\javaProject_1 경로에 fistProject로 자바 프로젝트 생성
    • src에 패키지 a.b.c.ch3 생성
    • 클래스 생성
package a.b.c.ch3;

public class Hello {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		System.out.println("안녕 이클립스 ㅋㅋㅋ !!!");
		
		HelloInterface hif = new HelloInterfaceImpl();
		hif.interfaceFunc();
		
		HelloVO hvo = new HelloVO();
		hvo.setMid("HGD");
		hvo.setMpw("HGD00");
		hvo.setMname("홍길동");
					
		System.out.print(hvo.getMid() + " ");
		System.out.print(hvo.getMpw() + " ");
		System.out.print(hvo.getMname());
		
	}

}
  • 인터페이스 생성
package a.b.c.ch3;

public interface HelloInterface {

	public void interfaceFunc();
}
  • 클래스생성 - interfaces - add - HelloInterface 클릭
  • package a.b.c.ch3; public class HelloInterfaceImpl implements HelloInterface { @Override public void interfaceFunc() { // TODO Auto-generated method stub System.out.println("Hello Interface ㅋㅋㅋ!!"); } }
  • 클래스생성
    • private으로 필드 생성
    • source - generate getters and setters
    • source - generate constructor using fields
      • 필드를 모두 인자로 받는 생성자
      • 아무것도 없는 생성자
    package a.b.c.ch3;
    
    public class HelloVO {
    
    	private String mid;
    	private String mpw;
    	private String mname;
    	
    	public HelloVO() {
    		
    	}
    
    	public HelloVO(String mid, String mpw, String mname) {
    		this.mid = mid;
    		this.mpw = mpw;
    		this.mname = mname;
    	}
    
    	public String getMid() {
    		return mid;
    	}
    
    	public void setMid(String mid) {
    		this.mid = mid;
    	}
    
    	public String getMpw() {
    		return mpw;
    	}
    
    	public void setMpw(String mpw) {
    		this.mpw = mpw;
    	}
    
    	public String getMname() {
    		return mname;
    	}
    
    	public void setMname(String mname) {
    		this.mname = mname;
    	}
    	
    }
    

8교시 (17:30-18:30)

  • [교재 350p] 클래스
java.lang.* : 자바 core 패키지
	문자열, 문자, 숫자, 시스템에 관련된 클래스 묶음
	Object
	String
	Integer
	System
	Wrapper
java.utill.*
	데이터(컬렉션 프레임워크), 날짜, 시간 관련된 클래스 묶음
	ArrayList
	HashMap
	Date
	Calendar
java.math.*
	숫자에 관련된 클래스 묶음
	BicDecimal
java.io.*
	파일 및 입출력에 관련된 클래스 묶음
	File
	inputStream
	outputStream
java.sql.*
	JDBC를 통한 데이터베이스 연동 클래스 묶음
	DriverManager
	Connection
	Statement
	PreparedStatement
	ResultSet
  • ArrayList
package a.b.c.ch4;

import java.util.ArrayList;
import java.util.Date;


public class ArrayListTest {

	public void arrayListTest() {
		System.out.println("ArrayListTest.arrayListTest() 함수 진입 >>> :");

		ArrayList aList = new ArrayList();
		System.out.println("aList 참조변수 주소값 >>> : " + aList);
		System.out.println("aList.size() >>> : " + aList.size());
		aList.add("홍길동");
		System.out.println("aList >>> : " + aList);
		System.out.println("aList.size() >>> : " + aList.size());
		aList.add(27);
		System.out.println("aList >>> : " + aList);
		System.out.println("aList.size() >>> : " + aList.size());
		aList.add(new ArrayListTest());
		System.out.println("aList >>> : " + aList);
		System.out.println("aList.size() >>> : " + aList.size());
		aList.add('홍');
		System.out.println("aList >>> : " + aList);
		System.out.println("aList.size() >>> : " + aList.size());
		aList.add("길동");
		System.out.println("aList >>> : " + aList);
		System.out.println("aList.size() >>> : " + aList.size());
		aList.add(new Integer(27));
		System.out.println("aList >>> : " + aList);
		System.out.println("aList.size() >>> : " + aList.size());
		aList.add(false);
		System.out.println("aList >>> : " + aList);
		System.out.println("aList.size() >>> : " + aList.size());
		aList.add(12.34566);
		System.out.println("aList >>> : " + aList);
		System.out.println("aList.size() >>> : " + aList.size());
		aList.add(new Date());
		System.out.println("aList >>> : " + aList);
		System.out.println("aList.size() >>> : " + aList.size());
		aList.add(aList);
		System.out.println("aList >>> : " + aList);
		System.out.println("aList.size() >>> : " + aList.size());
		
		for (int i=0; i < aList.size(); i++) {
			System.out.println("aList.get(" + i + ") >>> ::: " + aList.get(i));
		}
	
		ArrayList<String> aList_1 = new ArrayList<String>();
		System.out.println("aList_1 >>> : " + aList_1);
		aList_1.add("홍길동");
		aList_1.add("23");
		System.out.println("aList_1 >>> : " + aList_1);
		System.out.println("aList_1.size() >>> : " + aList_1.size());
	
	}

	public static void main(String args[]) {
		// TODO Auto-generated method stub
		new ArrayListTest().arrayListTest();
	}
}

Notes


728x90