exam
1.자바의 특징
- 간단하다.
- 객체지향적이다.
- 인터프리터 언어이다.
- 강력하다
- 안전하다
- 플랫폼이 독립적이다
- 멀티 쓰레딩을 지원한다.
- 동적이다
2.JVM, JRE, JDK
- JVM : Java로 개발한 프로그램을 컴파일하여 만들어지는 바이트코드를 실행하기 위한 가상머신
- JRE : JVM이 자바프로그램을 동작시킬 때 필요한 라이브러리 파일들과 API,JVM등 기타 파일들을 가지고 있다. 읽기만 가능
- JDK: JRE + 개발을 위해 필요한 도구(javac,java 등 )등을 포함한다.
3.람다식(익명함수)
Lamda Expression=>함수를 하나의 expression(식)으로 표현한 것이다.-> 함수를 람다식으로 표현하면 메소드의 이름이 필요없다.
- 코드를 간결하게 만들고, 지연 연산으로 성능을 높이고, 불필요한 부분들을 제거한다.
- 주로 고차 함수에 인자로 전달되거나 고차 함수가 돌려주는 결과값으로 쓰인다.
사용법:
(매개변수, ...) -> { 실행문 }
일반식
public int sum(int a, int b) {
return a + b;
}
람다식
(a, b) -> a + b;
장점: 코드의 간결성, 필요한 정보만을 사용하는 방식을 통한 퍼포먼스 향상
단점: 남용시 코드 해석이 어려울 수 있다. -> 주석을 단다.
4.추상화
공통적인 속성과 기능을 정의함으로써 코드의 중복을 줄이고, 클래스 간 관계를 효과적으로 설정하고, 유지또는 보수를 용이하게 하는 것 이다.
추상 클래스와 인터페이스 문법 요소를 통해 추상화를 구현한다.
5.NullPointException 발생 상황
- null값이 참조된 인스턴스의 필드 or 메서드를 호출한 경우
-
6.IndexOutOfBounds 발생 상황
랜덤 숫자의 주문이 들어올 때 주문에 맞춰 버튼을 누르면 되는 게임에서 내가 누르는 버튼과 주문을 비교하는 방법에 대해서 이틀전부터 고민하고 해결하려고 했지만 어제 적었던 내용에 갇혀 다른 생각을 하지 못했다.
주문이 들어오면 주문리스트에 담고 버튼 누를 때마다 배달리스트에 담아서 하나씩 비교하는데 배달리스트 길이에 -1을 한 것을 배달리스트에서 get하면 가장 최신 주문을 선택할 수 있다. 주문리스트와 배달리스트는 제대로 된 상태라면 리스트의 같은 위치에 위치할 것이다.
예시 코드를 확인해보자.
private void run() {
JFrame frame = new JFrame();
frame.setSize(400,500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
frame.add(panel);
ArrayList<String> foodList = new ArrayList<>();
foodList.add("햄버거");
foodList.add("피자");
foodList.add("치킨");
foodList.add("커피");
foodList.add("케이크");
JButton hamburgerButton = new JButton(foodList.get(0));
JButton pizza = new JButton(foodList.get(1));
JButton chicken = new JButton(foodList.get(2));
JButton coffee = new JButton(foodList.get(3));
JButton cake = new JButton(foodList.get(4));
panel.add(hamburgerButton);
panel.add(pizza);
panel.add(chicken);
panel.add(coffee);
panel.add(cake);
ArrayList<String> orderList = new ArrayList<>();
orderList.add("피자");
orderList.add("커피");
orderList.add("햄버거");
orderList.add("치킨");
orderList.add("케이크");
ArrayList<String> deliveryList = new ArrayList<>();
hamburgerButton.addActionListener(event->{
deliveryList.add(foodList.get(0));
if(deliveryList.get(deliveryList.size()-1).equals(orderList.get(deliveryList.size()-1))){
System.out.println("정답");
}else{System.out.println("틀림");}
});
pizza.addActionListener(event->{
deliveryList.add(foodList.get(1));
if(deliveryList.get(deliveryList.size()-1).equals(orderList.get(deliveryList.size()-1))){
System.out.println("정답");
}else{System.out.println("틀림");}
});
chicken.addActionListener(event->{
deliveryList.add(foodList.get(2));
if(deliveryList.get(deliveryList.size()-1).equals(orderList.get(deliveryList.size()-1))){
System.out.println("정답");
}else{System.out.println("틀림");}
});
coffee.addActionListener(event->{
deliveryList.add(foodList.get(3));
if(deliveryList.get(deliveryList.size()-1).equals(orderList.get(deliveryList.size()-1))){
System.out.println("정답");
}else{System.out.println("틀림");}
});
cake.addActionListener(event->{
deliveryList.add(foodList.get(4));
if(deliveryList.get(deliveryList.size()-1).equals(orderList.get(deliveryList.size()-1))){
System.out.println("정답");
}else{System.out.println("틀림");}
});
frame.setVisible(true);
}
이렇듯 같은 위치에 위치하기에 리스트의 가장 최근에 들어온 값을 비교해보면 될 것이다.
이 부분을 하면서 내가 막히는 부분을 따로 뺴내서 공부하는 법을 배웠고 이러한 학습법이 익숙해지면 테스트 코드에서 실행해보면 될 것이다.
'TIL' 카테고리의 다른 글
Day37(랜덤은 테스트코드 하기 힘들다.) (0) | 2023.03.10 |
---|---|
Day36() (0) | 2023.03.09 |
Day34(반복문을 사용하는 경우) (0) | 2023.03.07 |
Day33(자바 컴파일 순서,반복의 3요소, 라이브러리와 framework차이, 객체지향 프로그램과 절차적 프로그램의 차이를 캡슐화 개념을 통해 설명,Value Object와 entity의 차이 ) (0) | 2023.03.06 |
Day32(입력받은 값이 비어 있지 않고, 숫자로 이루어져 있는지를 확인하는 조건문) (0) | 2023.03.05 |