람다식 : 익명 함수를 이용해서 익명 객체를 생성하기 위한 식 - 인터페이스 함수을 람다식을 사용해서 바로 구현 - 객체를 따로 만들 필요가 없음 - 인터페이스가 갖고 있는 메소드를 간편하고 즉흥적으로 구현하여 사용 - 식별자 없이 실행 가능 장점 - 불필요한 클래스 파일이 생기는 것을 막을 수 있음 - 과정이 간결해짐 기본 형태 ( 타입 매개변수, ... ) -> { 실행문; ... } - 타입 매개변수 : 오른쪽 중괄호 블록을 실행하기 위해 필요한 값을 제공 - -> 기호 : 매개 변수를 이용해서 중괄호 실행 함수적 인터페이스 ( @FunctionalInterface) : 람다식으로 구현 할 인터페이스 - @FunctionalInterface가 적용된 인터페이스는 한 개의 추상 메소드만 선언 가능 -..
Anonymous (익명) : 이름이 없는 것 Anonymous class (익명 클래스) : 이름이 없는 클래스 - 함수를 바로 구현해서 사용 Anonymous Fuction (익명 함수) : 이름이 없는 함수 - 함수 인수로 코드를 전달할 때 사용 Anonymous Object (익명 객체) : 이름이 없는 객체 - 객체를 생성하지 않고 사용 - 객체가 없어서 메모리가 만들어져도 바로 사라짐 - 보통 한번 쓰고 말 때 사용 - interface 구현 interface Apple13 { void func01(); } - 익명 클래스 Apple13 a13 = new Apple13() { public void func01() { System.out.println("Apple13"); } }; a13.fun..
삼항연산자 : if문을 비교적 짧고 간결하게 작성하는 방법 - 형태 : (조건문) ? 참일 때 값 : 거짓일 때 값 // 예시 1 int a = 10; int b; if (a 0) { System.out.println("호랑이"); } else { System.out.println("코끼리"); } // 삼항연산자 System.out.println((a > 0) ? "호랑이" : "코끼리"); - 사용 예제 -> 어떤 값을 넣든 중간 값을 찾는 알고리즘 //중간 값 구하기 int a = 1, b = 2, c = 3; // int a = 1, b = 3, c = 2; ..
Anonymous (익명) : 이름이 없는 객체 - 단독으로 생성할 수 없고, 클래스를 상속하거나 인터페이스를 구현해야만 생성가능 - 필드의 초기값이나 로컬변수의 초기값, 매개 변수의 매개값으로 주로 대입됨 1. 자식 객체 생성 - 부모 타입으로 필드나 변수를 선언하고, 자식 객체를 초기값으로 대입할 경우 - 생성자 선언 불가 class Child extends Parent { } //자식 클래스 선언 class A { Parent field = new Child(); //필드에 자식 객체를 대입 void method() { Parent localVar = new Child(); //로컬 변수에 자식 객체를 대입 } } -> 필드를 선언할 때 초기값으로 익명 자식 객체를 생성해서 대입 class A{ /..
중첩 클래스 - 두 클래스의 맴버들을 서로 쉽게 접근 할 수 있음 - 외부에는 불필요한 관계 클래스를 감춤으로써 코드의 복잡성 감소 ex) class ClassName { class NestedClassName { } } 1. 멤버 클래스 : 클래스의 멤버로써 선언되는 중첩 클래스 - 클래스나 객체가 사용중이라면 언제든지 재사용 가능 ex) class A { class B { } } 2. 로컬 클래스 : 메소드 내부에서 선언되는 중첩 클래스 - 메소드 실행 시에만 사용 - 메소드 실행 종료시 사라짐 ex) class A { static class B { } } - 인스턴스 멤버 클래스 : static 키워드 없이 선언된 클래스 - 인스턴스 필드와 메소드만 선언 가능 - 정적 필드와 메소드는 선언 불가 -..
경로 1. 절대 경로 - 웹페이지나 파일이 가지고 있는 고유 경로 2. 상대 경로 - 작업 공간에서의 상대적인 위치 예시 작업 공간 : C:\Users\BYUN\Desktop\Java\0415 파일 위치 : C:\Users\BYUN\Desktop\Java\0415\파일이름 - 절대 경로 : C:\Users\BYUN\Desktop\Java\0415\파일이름 - 상대 경로 : 파일 이름 작업 공간 : C:\Users\BYUN 파일 위치 : C:\Users\BYUN\Desktop\Java\0415\파일이름 - 절대 경로 : C:\Users\BYUN\Desktop\Java\0415\파일이름 - 상대 경로 : Desktop\Java\0415\파일이름
Instanceof : 객체 타입 확인 - 부모 타입의 변수가 부모 객체를 참조할 경우, 자식 타입으로 변환할 수 없다 - 부모 변수가 참조하는 객체가 부모 객체인지 자식 객체인지 확인 기본 형태 boolean 변수이름 = parent(객체) instanceof child(타입); - parent 객체가 child 타입이면 true, 아니면 false 반환 #무조건 boolean으로 선언 예제 - Parent.class public class Parent { } - Parent.class를 상속 받는 Child.class public class Child extends Parent{ } - Main public class InstanceofEx { public static void method1(Pare..
Wrapper (포장) - 포장하고 있는 기본 타입 값은 외부에서 변경할 수 없음 -> 값을 바꾸고 싶다면 새로운 포장 객체를 만들어야 함 - 문자열을 기본 타입으로 변환할 떄에 주로 사용 -> 기본 형태 parse.기본타입 ex) num = Integer.parseInt("100"); 기본 타입 포장 클래스 byte Byte char Character short Short int Integer long Long float Float double Double boolean Boolean Boxing - 기본 타입의 값을 포장 객체로 만드는 과정 - 기본 형태 기본 타입명.valueOf( ) ex) Integer a = Integer.valueOf(100); 타입명 이름 = new 타입명(값); ex) I..
Arraylist를 이용 - Data 클래스 class Name { // 이름 String name; public void setName(String name) { this.name = name; } public String getName() { return name; } } class Score { // 점수 int score; public void setScore(int score) { this.score = score; } public int getScore() { return score; } } class Manager { // 이름과 점수를 종합 Name name = new Name(); Score kor = new Score(); Score math = new Score(); Score eng..
package Grade; import java.util.Iterator; import java.util.LinkedList; import java.util.Scanner; class Student { private String name; private int kor; private int eng; private int math; private int total; private float avg; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getKor() { return kor; } public void setKor(int kor) { this.kor = k..
동기화 : 멀티 스레드 프로그램에서 임계영역을 처리할 경우, 심각한 문제가 발생할 수 있는데 이를 해결할 방법 #임계영역 : 멀티 스레드에 의해 공유자원이 참조될 수 있는 코드의 범위 - 공정 처리 : 여러개의 스레드가 하나의 컴퓨팅 자원을 사용하기 위해 동시에 접근하는 프로그램을 작성 할 경우, 모든 스레드는 공정하게 그 자원을 사용할 수 있도록 함 - 기아 상태 : 하나의 동작이 독점하여 동작되는 상태 -> 공정하지 않음 -> wait( )와 notify( )를 사용하여 해결 class ATM implements Runnable { private long depositeMoney = 10000; public void run() { synchronized (this) { for (int i = 0; i..
프레임 사용 방법 2가지 - 첫번째 방법 import java.awt.*; public class FrameEx { public static void main(String[] args) { Frame f = new Frame(); f.setTitle("Frame Text"); f.setSize(300,300); f.setVisible(true); } } - 두번째 방법 import java.awt.*; public class FrameEx extends Frame { public FrameEx() { System.out.println("프레임 테스트"); setSize(300, 300); // 프레임 크기 setVisible(true); // 창 띄우기 } public static void main(St..
내부 클래스 - outter class의 멤버를 자유롭게 씀 -> 확장 - static 필드를 쓸 목적 1. member inner class public class MemberInner { //초기화 시켜주면 안되지만 확인을 위해 초기화 private int a = 10; public int b = 20; protected static int c = 30; class Member{ //Inner class public void disp() { System.out.println(a); System.out.println(b); System.out.println(c); } } public static void main(String[] args) { //MemberInner mi = new MemberInne..
인터페이스 - 상수와 추상 메소드만 갖고 있다 - 시간 단축 -> 강제성을 갖고 있기 때문에 무조건 정의되어있는 것들을 오버라이딩 해줘야 한다 - 독립적 프로그램 가능 - 동적 바인딩 가능 - 같은 놈들끼리 상속 가능 - 다중 상속 가능 -> 왜? 이름 밖에 선언을 하지 않기 때문 Ex) interface A { (final static) int a = 10; (abstract) void disp(); } #상속은 가져다 써!! 인터페이스는 만들어!! 뭐 이런 느낌... 중첩 인터페이스 : 클래스의 멤버로 선언된 인터페이스 - 해당 클래스와 긴밀한 관계를 맺는 구현 클래스를 만들기 위함 - UI 프로그래밍에서 이벤트 처리 목적 ex) class A { interface I { void mtehod( );..
import java.util.Scanner; abstract class Memory { protected int[] m; protected int count; Memory(){ //생성자 m = new int[20]; count = 0; //초기화 } public void push(int i) { if(full()) { m[count++] = i; } } //추상 클래스 abstract int pop(); abstract boolean full(); abstract boolean empty(); } class MyStack extends Memory{ @Override public int pop() { if(empty()) { return m[--count]; } else return -1; } @Ov..
super 클래스는 항상 자식 생성자의 첫번째 디폴트에 생략되어 있다 == : 위치비교 .equals( ) : 값 비교 final class : 상속 금지 - 확장 불가 -> has ~a관계 가능 final method : 오버라이딩 금지 final 변수 : 값 변경 금지 -> 상수 추상 메소드 - 공통된 이름만 제공 -> 자식이 기능을 만들어야함 (강제성) - 객체를 만들 수 없다 - 추상 클래스를 객체로 만들 수 있는 예외적인 경우 : anonymous inner class -> 이벤트 처리 - C++에서 순수 가상 함수와 같은 기능을 한다 - 미완성 메소드 - 여러개를 받을 수 있는 interface를 선호
import java.util.Scanner; public class Calc { // 재귀 public static int calc(String input) { int pos; // indexof(); - 문자가 없으면 -1반환 pos = input.indexOf('+'); // +의 위치를 알려줘! System.out.println(input); if (pos != -1) { // 문자가 있으니까 -1이 아니여야 함 return calc(input.substring(0, pos)) + calc(input.substring(pos + 1)); } else { pos = input.indexOf('-'); if (pos != -1) { return calc(input.substring(0, pos)) -..
성적 처리 프로그램 1. 입력 - 한명씩 2. 전체 출력 / 오름차순으로 출력 3. 검색 - 이름 검색 / 성적 (국어, 영어, 수학, 총점) 검색 4. 수정 - 이름을 받아서 각 과목 수정 5. 삭제 - 이름을 받아서 삭제 import java.util.Scanner; class Name { //이름 private String name; public void setName(String name) { this.name = name; } public String getName() { return name; } } class Score { //점수 private int score; public int getScore() { return score; } public void setScore(int score)..
배열 : 동일한 데이터 타입을 순차적으로 저장 장점 : 일괄처리 int [ ] arr; -> 스텍이라는 공간에 arr이라는 공간이 생김 arr = new int[5]; -> 힙 영역에 5개가 생긴다 Stack 영억 ↙ Heap 영역 public class Array { public static void main(String[] args) { //for-each int a[] = {1,2,3,4,5,6}; for(int i :a) { System.out.println(i); } } } 2차원 배열 public class Array { public static void main(String[] args) { //2차원 배열 //arr[0] = new int[2]; //arr[1] = new int[7]; i..
this : 자기 자신을 참조하는 레퍼런스 변수 - 인스턴스 메소드에 첫번째 인자에 존재 사용 - 자기 자신을 return 할 때 -> 반복 처리 public class ThisCall { private int a; private int b; public ThisCall() { this(0, 0); System.out.println("디폴트 생성자"); // a = b = 0; } public ThisCall(int data) { this(data, 0); System.out.println("생성자 -> " + data); //a = data; //b = 0; } public ThisCall(int data1, int data2) { System.out.println("생성자 -> " + data1 + ..
static : 객체를 만들지 않음 클래스 : 첫글자가 대문자로 시작 자바는 100% 상속구조이다 - extends object를 안해줘도 object를 상속 받고 있다 #JAVA의 char는 2byte 객체를 만들 때에는 무조건 ( )를 선언해줘야 한다 대,소문자를 구별한다 - static : 모든 객체가 공유한다 - 메모리를 낭비하지 않기 위함 'private static 필드명' 을 사용하고 싶을 때, static 메소드를 통해서 사용한다 필드 : 메소드를 통해 사용한다 ex) setter, getter 메소드 : 외부에서 필드를 접근 할 수 있게 권한을 줌 자바에서는 포인터 개념이 없다 -> 레퍼런스 변수를 포인터 대신으로 사용하는 개념
스레드 : 프로세스 내에 있으며, 운영체제가 CPU에 실행하도록 스케줄하는 기본 단위 Thread안에 Runnable 인터페이스가 참조 변수로 들어가있다 Runnable은 run( ) 메소드 하나만 정의되어 있다 1. Thread 클래스 사용 기본 형태 class 클래스 이름 extends Thread { public void run( ); // 구현 } 선언한 클래스 안에서 run( ) 메소드를 사용하기 위해 Thread 클래스를 상속 받아 씀 public class ThreadEx extends Thread { //Thread 클래스 상속 public void run() { while(true) { System.out.println("스레드 예시"); } } } 2. Runnable 인터페이스 사용 ..