Java
-
람다 LambdaJava 2022. 4. 11. 13:27
💡 람다 Lambda : 코드의 양이 줄어들고 읽기 쉽다 == 익명 함수 Anonymous functions 📌인터페이스의 메서드가 1개 이상이면 람다함수 사용할 수 없다 -> @FunctionalInterface 는 두번째 메서드를 허용하지 않는다 : 어노테이션 사용 사용 전 interface Calculator { int sum(int a, int b); } class MyCalculator implements Calculator { public int sum(int a, int b) { return a+b; } } public class Sample { public static void main(String[] args) { MyCalculator mc = new MyCalculator(); int..
-
콘솔 입출력 ScannerJava 2022. 4. 11. 11:59
🔎 콘솔 : 사용자의 입력을 받거나 사용자에게 문자열을 출력해 주는 역할을 하는 것을 통칭하는 말 * 콘솔창에서 해당 문자열을 보여주는 것을 "콘솔 출력" 해당 질문에 사용자가 답변을 입력하는 것을 "콘솔 입력" * 엔터키를 입력해야 사용자의 입력이 종료되고 프로그램에 전달된다 * 입력한 문자열을 얻기 위해서는 자바의 System.in을 사용한다 💡 InputStream : InputStream의 read메서드는 1byte만 읽는다 -> 아스키코드로 읽어들인다 * 스트림 : 이어져 있는 데이터(byte)의 형태 import java.io.IOException; import java.io.InputStream; public class Sample { public static void main(String[..
-
기본 클래스(Object, String, Class)Java 2022. 3. 6. 15:20
💡 java.lang 패키지 : 많이 사용하는 기본 클래스들이 속한 패키지 A에 A+B의 문자열이 들어오며 새로운 문자열 주소가 생성된다 => 빈 메모리가 생성되고 gabage가 많이 생길 수 있다. ☞ StringBuilder, StringBuffer : 내부적으로 가변적인 char[] 배열을 가지고 있는 클래스 : 문자열을 여러번 연결하거나 변경할 때 유용 : 새로 생성하지 않고 기존 배열을 변경하므로 gabage가 생성되지 않는다 🔎 StringBuffer : 멀티 쓰레드 프로그래밍에서 동기화 보장 🔎 StringBuilder : 단일 쓰레드 프로그램에서 사용 권장 💡 Class 클래스 : 자바의 모든 클래스와 인터페이스는 컴파일 후 class 파일로 생성됨 : class 파일에는 객체의 정보 (멤..
-
인터페이스interfaceJava 2022. 3. 5. 22:12
🔎 인터페이스는 왜 필요할까? ex) 사자가 오면 바나나를 준다, 호랑이가 오면 사과를 준다, 기린이 오면 바나나를 준다... -> 동물들의 종류만큼의 feed 메서드가 필요했던 ZooKeeper 클래스를 Predator 인터페이스를 이용해 구현 -> 단 한개의 feed 메서드로 구현 * ZooKeeper 클래스가 동물들의 종류에 의존적인 클래스에서 동물들의 종류와 상관없는 독립적인 클래스가 되었다 interface Predator { String getFood(); } class Animal { String name; void setName(String name) { this.name = name; } } class Tiger extends Animal implements Predator{ public..
-
맵(Map), 집합(Set), 상수집합(Enum)Java 2022. 3. 5. 14:20
💡 맵 Map : 대응관계를 쉽게 표현할 수 있게 해주는 자료형, 순서 의존X -> 순서 없으므로 인덱스 사용 불가 * "이름" = "홍길동", "생일" = " 몇 월 며칠" 등으로 구분 : key와 value를 한 쌍으로 갖는 자료형, key를 통해 value를 얻어낸다 ex) people = '사람' true/false 리턴, 객체명.containsKey(key); ☞ remove() : 삭제, key에 해당되는 아이템(key, value)을 삭제한 후 그 value값을 리턴, 객체명.remove(key); ☞ size() : map의 갯수를 리턴, 객체명.size(); ☞ keySet() : 맵(map)의 모든 key를 모아 리턴, 객체명.keySet(); -> [ , ]로 (Set 자료형으로) 리..
-
템플릿 메서드Java 2022. 3. 4. 21:49
💡 템플릿 메서드 : 추상메서드나 구현된 메서드를 활용해 전체 기능의 흐름(시나리오)을 정의하는 메서드 : final로 선언시 -> 하위 클래스에서 재정의 불가 💡 final 예약어 : final변수는 오직 한 번만 값을 할 당할 수 없다 : final 메서드는 하위 클래스에서 재정의(overriding) 할 수 없다 : final 클래스는 더 이상 상속되지 않는다 * public static final int a=25; -> static 일 때 new해서 사용할 필요 없고 클래스명.a 사용
-
추상 클래스Java 2022. 3. 4. 19:07
💡 추상 클래스 Abstract Class : 인터페이스 역할 + 클래스의 기능을 지닌 추상클래스 : abstract 예약어 사용, 클래스 앞에 명시 + 메서드 앞에도 abstract 명시 : 추상 클래스의 메서드도 인터페이스 메서드와 마찬가지로 구현X 선언만 존재한다. -> 해당 abstract 클래스를 상속하는 클래스에서 abstract 메서드를 반드시 구현해야한다 ex) abstract int add(int x, int y); // 입출력만 있는 추상 메서드 : 추상 클래스는 new 인스턴스화 할 수 없다 -> 반드시 추상 클래스를 상속한 실제 클래스를 통해서만 객체를 생성할 수 있다 : 추상 클래스에 실제 메서드를 추가하면 만들어진 객체에서 그 메서드들을 모두 사용할 수 있게 된다 : 결과 🔎 인..
-
상속, 메서드 오버라이딩, 가상 메서드, 다형성Java 2022. 3. 1. 04:51
💡 상속 Inheritance : 이미 구현된 클래스를 상속 받아서 속성/기능이 확장되는 클래스를 구현한다 : 상속 하는 클래스 == 상위 클래스 , 부모 클래스, super class, parent class : 일반적인 의미 (포유류) 상속 받는 클래스 == 하위 클래스, 자식 클래스, subclass, child class : 구체적인 의미 (사람) : class B extends A { // B->A B클래스가 A클래스를 상속받는다, A클래스가 B클래스에게 상속한다. } : 부모 클래스를 상속받은 자식 클래스는 부모 클래스의 기능 + 더 많은 기능을 갖도록 작성한다 cf) 합성 💡 접근 제한자 가시성 🔎 상속 : 클래스 생성 과정 : 하위 클래스 생성 될 때 상위 클래스가 먼저 생성된다 : 상위클..