전산 교육 정리(1)_JAVA
교육 정리 : Java 3일 / SQL 3일(4시간 추가) / 전자정부프레임워크(4시간 추가)(Spring 기반) 4일 진행
5월 10일(수) 11시 ~ 1시 : JAVA Test 진행 // 쓰레드 쪽?
*** Java 시험 (10문항) -> 코드 9문제 / 이론 1문제 (2개 정도만 헷갈리고 나머지는 코드 치면 그대로)
기계어 -> ASSEMBLY -> B(Unix) -> C(Unix) --> C++(객체지향 언어) / Linux(clone) -> 플랫폼 종속 최소화 -> Java(JVM) -> JDK-17(Java Development Kit) / JRE -> Java Runtime Environment / SpringFramework
JAVA : 안정성과 유지보수를 위해 사용 (가전제품의 기능을 프로그램으로 제공하기 위해 개발)
전자정부프레임워크 : Spring 기반(Java)
AdoptOpenJDK 설치 (JAVA)
IntelliJ IDEA Community Edition 개발도구 설치
1세대 --> 2세대 --> 3세대
| 기계어 | 어셈블러 | C, 포트란, 베이직, 코볼 등
4세대 --> 5세대
비주얼베이직 자바
델파이 C++, C#
파워빌더 등 ASP, PHP
Python
Laravel 프레임워크 PHP (오픈소스)(워드프레스) -> MOODLE
Java (제임스 고슬링 개발) : Java 2 EE (Spring 기반) - 금융권, 공기업, 공공기관 사용
[오류 종류]
- 컴파일 시간에 발생하는 구문(Syntax) 오류 : 이클립스에 의해 오류가 자동 표시된다.
- 실행 시 발생하는 실행 시간(Runtime) 오류 : 프로그램 실행 시 JVM에 의해 오류 발생
- 논리적 문제로 발생하는 논리(Logic) 오류 : 프로그래머에 의해 발견되어야 수정 가능
[예외처리] - 프로그램 수행 도중 발생할 수 있는 장애에 대한 대처
- NullPointerException : 객체를 생성하지 않고 참조할 경우 해당 객체를 참조할 수 없어서 발생
- IndexOutOfBoundsException : 배열에서 인덱스 범위를 초과했을 때 발생
- NumberFormatException : 문자열을 숫자로 변환할 때, 해당 문자가 숫자 형태가 아니라면 발생한다.
- ClassCastException : 허용되지 않은 타입으로 변환할 때 발생한다.
- IllegalArgumentException : 매개변수가 의도하지 않은 상황을 유발할 때 발생
- ArithmeticException : 산술연산에 오류가 있을 때 발생 (0으로 나눌때 등)
< 정수형 >
byte - 1byte : -128 ~ 127
short - 2byte : -32768 ~ 32767 - 거의안씀 but 시중에있는 어플중 호환성문제로 남음
int - 4byte - 0, 5, 9, 2100000000 int - 4byte : -21억 ~ 21억 - 대부분 int를 씀
long - 8byte : -900경 ~ 900경
< 실수형 >
float - 4.x byte
double - 8byte : 10.0, 9.5, 2.0, 0.0 <--표준
< 문자형 >
char - 2byte
Stay hungry, Stay foolish :: 같은 4byte int와 float의 차이 (tistory.com)
같은 4byte int와 float의 차이
int형과 float형은 둘 다 4바이트로 자료형의 크기가 같은데실제로 표현될 수 있는 값은 왜 그렇게 큰 차이가 나는 것일까? int, float 자료형의 bit구조를 알기전까지는 위와 같은 의문을 가진바가 있
smile2x.tistory.com
char : 16비트
byte : 8비트
short : 16비트
int : 32비트
long : 64비트
출력문 : System.out.printf() 문 제공
- 이항 논리 연산자 : &&(AND) , ||(OR)
&& : AND (A && B)
|| : OR (A || B)
<< : (a << n) - 정수 a를 왼쪽으로 n비트 시프트 (화살표 방향대로 시프트 진행)
>> : (a >> n) - 정수 a를 오른쪽으로 n비트 시프트
- 3항 연산자 : 3개의 피연산자를 가진 3항 연산자 “ ? : ”제공
System.out.println(count != 10 ? "10이 아님" : "10을 가짐");
public class Main{
public static void main(String[] args) {
int score[] = {88, 97, 53, 62, 92, 68, 82};
int max = score[0];
//확장된 for문 -> for(int i=1;i<score.length;i=i+1)
for (int i : score){
if(i > max)
max = i;
}
System.out.println("배열 요소의 최대값은" + max + "입니다.");
}
}
import java.util.Scanner;
// Press Shift twice to open the Search Everywhere dialog and type `show whitespaces`,
// then press Enter. You can now see whitespace characters in your code.
public class Main{
public static void main(String[] args) {
int num[] = {8, 7, 3, 6, 9, 6, 8, 7, 8, 4, 1, 2};
Scanner stdin = new Scanner(System.in);
System.out.print("찾고 싶은 숫자 입력 : ");
int key = stdin.nextInt();
int count = 0;
for (int i=0; i < num.length; i++){
if (num[i] == key){
count++;
System.out.println((i + 1) + "번재 데이터와 일치");
}
}
if(count == 0)
System.out.println(key + "같은 배열에 없습니다.");
else
System.out.println(key + "같은 배열에" + count + "없습니다.");
}
}
배열 활용
public class Main{
public static void main(String[] args) {
int num1[] = {10, 20, 30};
int num2[] = {30, 40, 50};
num2 = num1;
num2[2] = 200;
System.out.print("num1 배열의 값 : ");
for (int i : num1)
System.out.print(i + " ");
System.out.print("\nnum2 배열의 값 : ");
for (int i : num2)
System.out.print(i + " ");
int num3[] = {100, 200, 300};
int num4[] = {400, 500, 600};
for (int i = 0; i < num3.length; i++)
num4[i] = num3[i];
num4[2] = 999;
System.out.print("\nnum3 배열의 값 : ");
for(int i : num3)
System.out.print(i + " ");
System.out.print("\nnum4 배열의 값 : ");
for(int i : num4)
System.out.print(i + " ");
}
}
public class Main{
public static void main(String[] args) {
int[] int1 = {9, 1, 7, 3, 5, 4, 6, 2, 8, 0};
System.out.println("초기배열 : " + Arrays.toString(int1));
Arrays.fill(int1, 3, 5, 33);
System.out.println("fill()수행후 : " + Arrays.toString(int1));
Arrays.sort(int1);
System.out.println("sort()수행후 : " + Arrays.toString(int1));
}
}
< 객체 특징 >
상속 : 확장의 개념으로, 상위클래스를 그대로 상속하고 추가로 확장되는 개념
캡슐화 : '정보의 은폐' 가능
추상화 : 복잡한 문제들 중에 공통적인 부분을 추출하여 추상 클래스로 제공하고, 상속을 이용하여 나머지 클래스들을 하위 클래스로 제공하는 기법
다형성 : 서로다른 객체가 동일한 메시지에 대하여 서로 다른 방법으로 응답할 수 있는 기능
클래스 : 멤버변수, 생성자, 메소드 (3가지 요소)
- public : 모든 클래스에서 접근 가능
- final : 서브 클래스를 가질 수 없는 클래스 / 종단변수
- abstract(추상) : 객체를 생성할 수 없는 클래스
*(기억) 클래스에 붙이는 public 한정자는 main 메소드를 가진 클래스에만 붙여야 합니다.
- final : 종단 변수
- static : 클래스 변수
- abstract : 추상 메소드
- synchronized : 동기화 메소드
객체 변수와 지역 변수들은 초기화 과정에서 약간의 차이가 있다
- 객체 변수들은 변수를 초기화하지 않아도, 객체가 생성되면 묵시적 값이 자동으로 설정(사 실은 객체가 생성되면서 묵시적 값으로 초기화를 수행)
int number; <- 객체변수만 선언
double rate;
- 메소드 지역 변수는 변수의 값을 명시적으로 초기화하지 않으면 구문 오류가 발생
- public void aMethod() {
int count; <- 메소드 내 지역변수 선언
System.out.println(number);
// Box3.java
public class Box3 {
int width;
int hegith;
int depth;
long idNum;
static long boxID = 0;
public Box3(){
idNum = ++boxID;
}
}
// Main.java
public class Main {
public static void main(String[] args) {
Box3 mybox1 = new Box3();
Box3 mybox2 = new Box3();
Box3 mybox3 = new Box3();
Box3 mybox4 = new Box3();
System.out.println("mybox1의 id번호 : " + mybox1.idNum);
System.out.println("mybox2의 id번호 : " + mybox2.idNum);
System.out.println("mybox3의 id번호 : " + mybox3.idNum);
System.out.println("mybox4의 id번호 : " + mybox4.idNum);
System.out.println("마지막 생성된 박스 번호는" + Box3.boxID + "번 입니다.");
}
}
생성자 이름은 클래스의 이름과 동일함
class Box4 {
int width;
int height;
int depth;
public Box4(int w, int h, int d)
{
width = w;
height = h;
depth = d;
}
}
public class Main {
public static void main(String[] args) {
Box4 mybox1 = new Box4(10, 20, 30);
int vol = mybox1.width * mybox1.height * mybox1.depth;
System.out.println("박스의 부피 : " + vol);
}
}
}
오버로딩(Overloading) : 동일한 메소드가 여러가지 기능 제공
- 생성자 매개 변수의 타입과 개수가 달라야 한다.
오버라이딩(Override)
class Box5 {
int width;
int height;
int depth;
public Box5() {
width = 1;
height = 1;
depth = 1;
}
public Box5(int w) {
width = w;
height = 1;
depth = 1;
}
public Box5(int w, int h) {
width = w;
height = h;
depth = 1;
}
public Box5(int w, int h, int d) {
width = w;
height = h;
depth = d;
}
}
public class Box5Test1 {
public static void main(String args[]) {
Box5 mybox1 = new Box5();
int vol = mybox1.width * mybox1.height * mybox1.depth;
System.out.println("박스의 부피(매개변수없음) : " + vol);
mybox1 = new Box5(10);
vol = mybox1.width * mybox1.height * mybox1.depth;
System.out.println("박스의 부피(매개변수 1개) : " + vol);
mybox1 = new Box5(10, 20);
vol = mybox1.width * mybox1.height * mybox1.depth;
System.out.println("박스의 부피(매개변수 2개) : " + vol);
mybox1 = new Box5(10, 20, 30);
vol = mybox1.width * mybox1.height * mybox1.depth;
System.out.println("박스의 부피(매개변수 3개) : " + vol);
}
}
public class Smaple3 {
void methodA(){
System.out.println("B 매소드 호출 전");
methodB();
System.out.println("B 메소드 호출 후");
}
void methodB(){
System.out.println("B 매소드 호출 전");
methodC();
System.out.println("B 메소드 호출 후");
}
void methodC(){
system.out.println("C 매소드 수행 완료");
}
}