백엔드/JAVA_이론공부 35

JAVA_스트림, 파일입출력

스트림 스트림은 배열, 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자이다. 스트림 특징 선언형 프로그래밍이라고 하는데, 쉽게 말하면 "어떻게 하는지는 관심 없고, 뭘 하는지가 중요한 프로그래밍 패러다임"이다. 선풍기에 전기가 얼만큼, 어느 시간동안 들어가는게 중요 한게 아니고, 전원 키면 바람 잘 나오는게 중요한거 처럼 말이다. 스트림은 메서드는 함수형 인터페이스 매개타입을 가지기 때문에 람다식 또는 메서드 참조를 이용해서 요소 처리 내용을 매개값으로 전달할 수 있다. 스트림은 내부 반복자를 시용 가능하다. 컬렉션 내부에서 요소들을 반복시키기 때문에 그냥 요소당 처리할 코드만 제공하면 된다. 외부 반복자는 뭐냐고? 우리가 사용하던 for, while문이다. 외부반복자, ..

JAVA_람다(람다식)

람다 람다는 메서드를 하나의 식으로 표현한 것이다. 메서드를 일일히 선언해서 만들지 않아도 간단한 수학식처럼 간결하고 명확하게 표현이 가능하다. 람다식 만들기 두 수를 더하는 메서드가 있다고 하자 int sum(int num1, int num2) { return num1 + num2; } 이 메서드를 일단 람다식으로 만들면 (int num1, int num2) -> { // 반환타입과 메서드명 제거 + 화살표 추가 return num1 + num2; } 위와 같이 메서드 명이 없어지고, 화살표(중요, 얘 있어야 댐)가 추가되고, 중괄호 안에 동작 내용(실행문)이 적힌다. 여기서 반환값이 있는 메서드는 return과 세미콜론(;)을 생략 가능하다. (int num1, int num2) -> { num1 +..

JAVA_애너테이션

애너테이션 우리는 코딩 할 때 모든걸 손으로 치긴해도, 모든걸 기억할 순 없다. 그래서 주석으로 이 코드가 뭘 하는지 뭘 의미하는지 적어놓는데, 애너테이션도 비슷한 맥락이다. 애너테이션은 정보를 전달하고자 하는 대상이 사람이 아닌 다른프로그램(콤퓨타)인 것에 차이가 있다. 애너테이션의 대표적인 역할은 컴파일러에게 문법체크를 하도록 정보제공 프로그램을 빌드 시 코드를 자동으로 생성하기 위한 정보 제공 런타임(실행 중에) 특정 기능을 실행하도록 정보 제공 예를들어, 애너테이션은 PC에게 "빌드할 때 이거 한번 문제있는지 봐라!" 라고 말해주는 것과 비슷하다. 꼭 빌드가 아니여도 뭐 좀 유심히 봐달라 라고 말해주는 것과 같다. 애너테이션의 종류 에너테이션에는 크게 3가지 종류가 있는데, 그 중에서 우리는 주로..

JAVA_제네릭

제네릭 클래스를 이용해서 객체를 찍어 낼 때, 내부에 선언된 맴버에 따라 반환타입이 결정된다. 그렇기 때문에, 다른 타입의 반환을 가지고 싶으면 다른 타입으로 다시 클래스를 만들어 주어야 한다. 일반적인 클래스 예시 class Basket { private String item; Basket(String item) { this.item = item; } public String getItem() { return item; } public void setItem(String item) { this.item = item; } } 이 클래스를 String 말고 int로 반환하고 싶으면 또 바꿔서 만들고, double로 만들고싶으면 또또 새로 만들어야 한다는 것이다. 하지만, 제네릭을 이용하면 하나의 클래스 만..

JAVA_열거형

열거형 열거형은 서로 연관된 상수의 집합을 의미한다. 상수는 변하지 않는 값으로, final 키워드로 선언 할 수 있다. 열거형은 상수들을 간편하게 관리할 때 유용하게 사용될 수 있고, 변하지 않는 데이터를 다룰 때 사용된다. 열거형을 사용하지 않고 상수를 설정하게 되면 코드예시 public static final int SPRING = 1; public static final int SUMMER = 2; public static final int FALL = 3; public static final int WINTER = 4; public static final int DJANGO = 1; public static final int SPRING = 2; // 계절의 SPRING과 중복 발생! publi..

JAVA_인터페이스

인터페이스 인터페이스는 추상화에서 가장 핵심적인 역할을 담당한다고 한다. 종종 인터페이스라고 말하는데 , 프로그래밍에서는 인터페이를 "서로 다른 두 시스템, 장치, 소프트웨어 따위를 서로 이어주는 부분 또는 그런 접속 장치" 라고 한다. 쉽게 비유하면, 우리가 에어컨을 사용할 때를 생각하면 된다. 에어컨이 어떤 냉매를 쓰고, 얼마나 펌프질 하고, 몇 칼로리의 열을 흡수, 방출하는지 알 길이 없다. 그냥 액정에 표시된 온도를 보고, 버튼을 눌러 작동시키는 것이다. 여기서 액정과 버튼이 인터페이스인 것이다. 액정의 숫자와 버튼이 어떤 값을 가지는지는 모르지만, 여튼 누르면 작동된다. -> 추상화 (상위 클래스) 눌린 버튼에 따라 모터를 돌리고, 냉매를 회전시키고, 바람의 방향을 조절하고... -> 구체적인 ..

JAVA_ final 키워드

final 키워드 final 키워드는 클래스, 메서드, 변수 앞에 붙는 키워드인데 이 키워드가 붙으면 변경 불가, 확장불가 상태가 된다. 클래스, 메서드, 변수에 띠라 다른 final의 의미, 하지만 변경불가, 확장불가 (출처 : 코드스테이츠) 코드 예시 final class FinalEx { // 확장/상속 불가능한 클래스 final int x = 1; // 변경되지 않는 상수 final int getNum() { // 오버라이딩 불가한 메서드 final int localVar = x; // 상수 return x; } } final 키워드의 핵심은 이 키워드가 앞에 붙으면 더이상 변경, 확장이 불가능 하다 라는 것이다.

JAVA_추상화 , 추상 클래스, abstract 제어자

추상화 추상의 사전적 의미는 "사물이나 표상을 어떤 성질, 공통성, 본질에 착안하여 그것을 추출하여 파악하는 것" 이라고 한다. 중요한건 공통성과 본질을 모아 추출 하는 것인데, 자바에서 추상화는 어떤식일까? 이전에 상위클래스를 상속하여 하위클래스를 만들어 냇는대, 추상화는 반대로 기존 클래스들의 공통점을 추출해서 상위클래스를 만들어 내는 것이다. 추상화의 예시, (출처 : 코드스테이츠) 위의 그림을 보면, 차, 오도방구 둘다 앞 뒤로 갈 수있다. 이것은 두 객체의 공통점인데, 이 객체들은 사실 탑승수단(운송수단)으로 묶을 수 있다. 이를 추상화라고 한다. abstract 제어자 영단어로 abstract는 "추상적인"이라는 뜻을 가지고 있는데, 자바에서는 "미완성" 이라는 의미가 크다. abstract는..

JAVA_다형성, instanceof 연산자

다형성 일반적인 의미에서 다형성이란 하나의 객체가 여러가지 형태를 가질 수 있는 것을 말한다. 자바에서 다형성은 무엇일까? 자바에서 다형성은 한 타입의 참조변수를통해 여러 타입의 객체를 참조 할 수 있도록 만든 것 이라고 한다. 상위 클래스 타입의 참조변수를 통해 하위클래스의 객체를 참조할 수 있도록 허용한 것이라고 하는데 이게 뭔말인지 감이 잘 안잡힌다. 코드를 읽어보면서 이해하는것이 나을 것 같다. 코드 예시 public class FriendTset { public static void main(String[] args) { Friend friend = new Friend(); BoyFriend boyFriend = new BoyFriend(); Friend girlfrend = new GirlFr..

JAVA_접근제어자 , getter, setter

접근 제어자 접근 제어자는 캡슐화를 구현하기 위한 핵심적인 방법이다. 접근제어자는 4개가 존재한다. 4개의 접근 제어자 (출처 : 코드스테이츠) 변수, 메서드에 접근제어자를 붙여 다른 생성자, 클래스 등에서 해당 변수, 메서드에 접근하는것을 제어 할 수 있다. ->불필요한 데이터 노출 방지, 데이터 임의변경 방지 위의 접근제어자의 사용 봄위는 아래와 같다. 접근제어자의 사용범위 (출처 : 코드스테이츠) 코드예시 package package1; // 패키지명 package1 //파일명: Parent.java class Test { // Test 클래스의 접근 제어자는 default public static void main(String[] args) { Parent p = new Parent(); // S..