오전 1,2시간 피그마를 배우고 그 후론 자바를 이어나간다.
피그마에서 유용한 검색어들
- google material design icon
- font awesome icons
- feather icon
- iconduck
- open iconic
일단 피그마페이지에서 과부하로 아무것도 안뜨길래 그냥 아래 일들을 하기로 함.
자바2에 들어가면 스프링과 스프링부트를 사용한다고 해 맥을 쓰는 나는 또 설치방법에서 해맬게 분명하기 때문에 미리 설치하기로 함..
오전에 할 것
- IntelliJ 설치 (완료)
- JetBrains 학생인증 (완료)
- 스프링부트까지 설치 (완료)
오후에 할 것 (일단 자습)
- 노마드코더 강의 듣기 (완료)
- 오늘 배운 자바 내용 복습 - 로또번호생성기 (완료)
약간의 딴짓을 하며 했던 것..
와 이제 스프링부트를 사용할 수 있다!
근데 이클립스에서는 어떻게 사용하지..
스프링부트는 이클립스에서 사용하는 법, 비주얼스튜디오코드에서 사용하는 법이 다 각각 있었다..!
각자 편한 곳에 설치해서 사용하면 될 듯한데 일단 해봤으니 어떤 툴에 사용할지는 강사님의 이야기를 들어보고 따라가야겠다.
vs코드 스프링부트 설치
[Spring Boot] vscode 개발 환경 구축하기 (MAC)
1. 배경 오늘은 스프링부트 개발환경 구축하기에 대해서 포스팅하겠습니다.
codingjalhaja.com
아마 나도 vs코드에 설치할듯해서 일단 참고 블로그 링크를 저장해둔다.
지금까지는 연습이었던 걸로..
추가로 깃에 대해 알아봤다.
✨ Git, Github 사용방법
Git : 로컬에서 관리하는 버전관리시스템, 다른 사람이 나의 작업내용을 볼 수 없음
Github : 클라우드서비스로 다른 사람과 협업 시 소스코드 공유 가능
CLU : 명령어 인터페이스, 터미널을 통해 컴퓨터와 상호작용
GLU : 입출력 등의 기능을 아이콘으로 나타낸 것
local : 우리가 사용하고 있는 컴퓨터
remot : 원격저장소
repository (repo, 저장소) : 프로젝트가 존재하는 공간
branch : 저장소의 공간에서 독립적으로 작업하는 공간
commit : 소스코드의 업데이트가 확정된 순간 git repo에 저장, push 해주면 반응
pull : 원격저장소의 내용을 로컬장소에 끌어오는 것
push : commit한 내용을 원격저장소에 업로드
여기까지 하고 이렇게 딴 짓을 하다 피그마 놓친 부분이 좀 있지만..
비록 하필 오늘 결과물을 제출하는 날이었지만..
그냥 내 진도를 나가기로 한다.
주말 하루 반나절 정도 잡아서 지금까지 배운 거 복습할 겸 유튜브 강의 찾아보면 될 듯하다.
사실 그전에 시험을 볼 수도 있다; 이번 주에 볼 듯;;
시험 볼 때는 이모티콘 비슷한거라도 성실하게 넣기 + 디테일 챙기기
피그마를 하면서 어려웠던 부분 기록)
피그마에서 이미지 자동으로 넘기기
한참 헤맸는데 이렇게 하면 되는 거 였다.
참고)
무한 캐러셀(Carousel) 만들기
slide1부터 slide까지는 이런식으로바꿔준다.하늘색 부분을 slide1은 slide2로, slide2는 slide3으로, slide3은 slide4로slide4는 slide1로 Navigete to 해주고 시간은 100ms, Smart animate가 아닌 in
velog.io
감사합니다.. 늘 은인이 있구나!
드디어 다시 자바로 넘어갔다!
자바2
→ 객체지향
class 클래스명 {
-속성(변수)
-생성자(기본생성자)
-기능(메소드)
}
객체 → 속성 + 기능
collection framework (데이터 저장 방식)
컬렉션 프레임 워크 → 변수 (자료구조)
‘프레임워크’가 붙으면 사용방법이 구조화되어 있다는 뜻.
= 형태와 사용방법이 정해져있다.
- List : 대표적인 클래스 ) ArrayList → 순서를 지켜 들어간다, 중복허용 O
- Set : 대표적인 클래스 ) HashSet → 순서를 지키지 않는다, 중복허용 X
- set - 로또번호생성기 같은 프로그램 만들때 좋음
- Map : 대표적인 클래스 ) HashMap → 순서를 지키지 않는다,map - 데이터 관리할 때 좋다 (학생, 회원 등)
- key와 value가 한쌍, key/value값 key → 중복허용 X value → 중복허용 O
위 세가지 자료구조를 기본적으로 자바에서 제공한다.
실제 존재하는 인터페이스 → 사용방식을 표준화 , 데이터를 관리하는 방식의 표준화
list 와 set 은 묶일 수 있음. → collection
상속 구조 정의가 이뤄진다.
공통의 특징 :
모든 collection framework 는 크기가 의미가 없다, object 타입이다.
ArrayList
: 배열에서 10개 이상의 값을 입력하면 알아서 늘려준다. 그렇기 때문에 크기는 큰 의미가 없어 지정하지 않는다.
데이터 관리의 핵심 - 읽고 쓰고 수정하고 삭제하기
package come.list;
import java.util.ArrayList;
public class ArraylistTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 읽고, 쓰고, 수정하고, 삭제하기
ArrayList list = new ArrayList(); // 배열로 저장공간이 만들어진다.
// 값 넣기
list.add(new String("5"));
list.add("1");
list.add("4");
list.add("2");
list.add("3");
list.add("3");
// 읽기, 쓰기
//list.get(0); // get 메소드 반환 타입은 object, 하지만 받는 타입은 String 때문에 형변환을 해야한다.
String s1 = (String)list.get(0);
String s2 = (String)list.get(4);
String s3 = (String)list.get(5);
System.out.println(s1); // 5 -> toString() 오버라이딩 되어 있음.
System.out.println(s2); // 3
System.out.println(s3); // 3 -> 중복 허용
// 수정하기
list.set(3, "AA");
String s4 = (String) list.get(3);
System.out.println(s4); // AA
// 배열의 크기 알아보기
System.out.println(list.size()); // 6 사이즈 크기를 반환해준다.
// 삭제하기
list.remove(5);
System.out.println(list.size()); // 5
// 중간데이터 삭제
list.remove(2);
System.out.println(list.get(2)); // AA
System.out.println(list.get(3)); // 3
//System.out.println(list.get(4)); // 에러남. 값이 없다.
}
}
Linked List 연결리스트
주소값을 사용
클래스의 데이터를 관리하는 방식
(순서대로 데이터를 처리할때는 ArrayList , 데이터를 차례로 처리한다.
때문에 중간에서 데이터를 처리하는 것은 굉장히 느리다.)
Linked List는 주소값을 바로 찾는다.
바로 연결 → 중간 데이터 처리 빠름
package come.list;
import java.util.ArrayList;
public class ArraylistTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 읽고, 쓰고, 수정하고, 삭제하기
ArrayList list = new ArrayList(); // 배열로 저장공간이 만들어진다.
// 값 넣기
list.add(new String("5"));
list.add("1");
list.add("4");
list.add("2");
list.add("3");
list.add("3");
//linked List
for (int i = 0; i <list.size(); i++) {
String s = (String)list.get(i);
System.out.println(s); // 5 1 3 4 2 3 3 들어간 순서 그대로 출력되는 것을 알 수 있다.
}
나머지는 api 에서 찾아서 써보기
기본형을 참조형으로 바꾸는 방법 :
래퍼 클래스(Wrapper Class)를 사용 → auto boxing
package come.list;
import java.util.ArrayList;
public class ArraylistTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 읽고, 쓰고, 수정하고, 삭제하기
ArrayList list = new ArrayList(); // 배열로 저장공간이 만들어진다.
// auto boxing
// 1,2,3,4,5
// Integer(1) -> 박싱
// Integer i = 3 -> 자동캐스팅으로 가능
// Object obj = 3 -> Object obj = new Integer(3); 같은 뜻
list.add(new Integer(1)); // new Integer 생략 가능
list.add(2);
list.add(3);
list.add(4);
list.add(5);
list.add(6);
list.add(7);
list.add(8);
list.add(9);
list.add(10);
int sum = 0;
for (int i = 0; i < list.size(); i++) {
int num = (Integer)list.get(i);
sum += num;
}
System.out.println(sum); // 55
향상된 for문은 데이터를 읽을 때 사용
// 향상된 for문
for (Object obj : list) {
int i = (Integer)obj;
sum += i;
}
System.out.println(sum); // 55
리스트의 특성을 따르는 자료구조, 스택과 큐
Stack 에 대해 알아본다.
Stack 구조
들어 오는 곳 나가는 곳이 한 곳, LIFO : 가장 늦게 들어온 것이 가장 먼저 사용된다
(class 제공이 됨)
Queue 구조
들어오는 곳, 나가는 곳 따로 있음, FIFO : 먼저 들어온 것이 먼저 나온다
(인터페이스)
peek() 가장 최근의 값 읽어오기
pop() 삭제하며 읽어오기, 데이터가 없는데 pop()을 하면 오류가 발생한다!
→ 오류를 방지하기 위해 데이터가 있는지 없는지 체크하거나
→ 예외처리를 사용
pop()과 empty() 사용
package come.list;
import java.util.Stack;
public class StackTest {
public static <E> void main(String[] args) {
// TODO Auto-generated method stub
Stack st = new Stack();
st.push("0");
st.push("1");
st.push("2");
while(!st.empty()) {
System.out.println(st.pop()); // 2 1 0 반대로 읽어온다
}
}
}
peek()과 search() 사용
package come.list;
import java.util.Stack;
public class StackTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Stack st = new Stack();
st.push("0");
st.push("1");
st.push("2");
// while(!st.empty()) {
// System.out.println(st.pop()); // 2 1 0 반대로 읽어온다
// }
if (!st.empty()) {
System.out.println(st.peek()); // 2 가장 최근에 추가된 값
System.out.println(st.search("0")); // 3
// search는 인덱스를 반환하는 것이 아니라 순번을 반환한다.
// search의 인자 값으로 받은 값이 스택구조에서 몇번째 있는지 반환
// 스택구조 -> LIFO : 가장 늦게 들어온 것이 가장 먼저 사용된다
// 가장 먼저 들어간 것이 가장 아래부터 쌓이면 위에서부터 순번 부여
}
}
}
System.out.println(st.search(0)); 을 넣었을 때 없는 값인데 -1 이 나온 이유
→ 퐁규의 답변 :
코드에서 System.out.println(st.search(0));**를 실행했을 때 -1이 나오는 이유는 search 메서드가 0이라는 정수 값을 찾기 때문입니다. 하지만 스택에는 문자열 "0"이 들어있기 때문에 일치하는 값을 찾지 못해서 -1을 반환합니다.
Stack 클래스의 search 메서드는 객체를 찾을 때 해당 객체가 스택에 존재하면 1부터 시작하는 위치를 반환하고, 존재하지 않으면 -1을 반환합니다. 따라서, "0"이라는 문자열을 찾아야 합니다.
잘못넣었는데 값이 나와서 뭔지 궁금해서 gpt한테 물어봄.
결과적으로 search()는 값이 없으면 -1 를 반환한다.
오늘 배운 것을 복습하며 로또번호 생성 프로그램을 만들어보자
(팀원이 내준 숙제)
// 정수형 배열리스트 al
// 1~45까지 리스트에 추가
// 랜덤으로 6개를 삭제하며
// 또 따른 배열리스트 lotto에 추가
// lotto 출력
초기 코드 :
package come.list;
import java.util.ArrayList;
import java.util.Random;
public class LottoNum {
public static void main(String[] args) {
// 정수형 배열리스트 al
// 1~45까지 리스트에 추가
// 랜덤으로 6개 삭제하며
// 또 따른 배열리스트 lotto에 추가
// lotto 출력
// 정수형 배열리스트 al
ArrayList<Integer> al = new ArrayList<Integer>();
// 배열리스트 lotto 6개의 값을 받는 곳
ArrayList<Integer> lotto = new ArrayList<Integer>();
// 랜덤클래스 생성
Random rand = new Random();
// 45개의 로또번호 al에 넣기
for (int i = 1; i <= 45; i++) {
al.add(i);
}
//System.out.println(al);
// 로또번호 6개의 값이 들어갈 공간
for (int i = 0; i <= 5; i++) {
lotto.add(i);
}
lotto.set(0, rand.nextInt(45));
lotto.set(1, rand.nextInt(45));
lotto.set(2, rand.nextInt(45));
lotto.set(3, rand.nextInt(45));
lotto.set(4, rand.nextInt(45));
lotto.set(5, rand.nextInt(45));
System.out.println("lotto 번호: " + lotto);
}
}
처음에 하다가 저 삭제한다는게 어디서 왜 삭제를 한다는건지 문제를 이해 못하고 그냥 로또번호 생성이면 금방인데 오늘 배운 걸 쓰려니까 어떻게 하는 건지도 모르겠고.. 꼬이고 꼬여 그냥 값만 나오게 만들었던 코드다.
al를 사용하지 않았고, set 도 for문으로 처리할 수 있는데 사용을 안한 그냥 성의가 없는 상태..
이걸 다시 정신차리고 바꿔보자.
하면서 생각해보니, 문제에서 ‘랜덤으로 6개를 삭제하며’라는 게 중복제거를 위한 거라는 걸 알게됐다! ㅋ
완성된 코드 :
package come.list;
import java.util.ArrayList;
import java.util.Random;
public class LottoNum {
public static void main(String[] args) {
// 정수형 배열리스트 al
// 1~45까지 리스트에 추가
// 랜덤으로 6개 삭제하며
// 또 따른 배열리스트 lotto에 추가
// lotto 출력
// 정수형 배열리스트 al
ArrayList<Integer> al = new ArrayList<Integer>();
// 배열리스트 lotto 6개의 값을 받는 곳
ArrayList<Integer> lotto = new ArrayList<Integer>();
// 랜덤클래스 생성
Random rand = new Random();
// 45개의 로또번호 al에 넣기
for (int i = 1; i <= 45; i++) {
al.add(i);
}
// 로또번호 6개의 값이 들어갈 공간만들기
// 공간에 al의 크기 범위 안 랜덤값 6개 받기 (al의 크기 = 길이 = 45까지 들어간 값)
for (int i = 0; i < 6; i++) {
int index = rand.nextInt(al.size());
// al에서 중복값 제거를 위해 lotto에 넣어진 index는 삭제
lotto.add(al.remove(index));
}
System.out.println("lotto 번호: " + lotto);
}
}
문제를 잘 이해하고 모르면 출제자에게 정확하게 물어보는게 시간을 아끼는 법.. 이다!
'2024_UIUX 국비 TIL' 카테고리의 다른 글
UIUX _국비과정 0523 [Map, 배열 정렬] (0) | 2024.06.11 |
---|---|
UIUX _국비과정 0522 [스택과 큐, 정렬, Set] (1) | 2024.06.11 |
UIUX _국비과정 0517~0520 [피그마] (0) | 2024.06.11 |
UIUX _국비과정 0516 [JS 애니메이션으로 풍선 날리기, 계산기] (0) | 2024.06.11 |
UIUX _국비과정 0514 [자바스크립트 CBT 구현] (1) | 2024.06.11 |