멀티캠퍼스 JAVA 백엔드 부트캠프/정리

멀티캠퍼스 백엔드 개발자 취업캠프(Java) 입과 3주차 정리

5ein 2023. 2. 21. 23:07

2023.02.13

자바는 객체지향형 프로그래밍(Object Oriented Programming, OOP).

객체지향형 프로그래밍: 부품을 조립하듯이 코딩하는 방식

부품은 ram에 저장, 조립은 cpu가

 

필요한 부품(객체)을 얻는 방법 3가지

JDK4500에서 찾아보고 --> mvn라이브러리 찾아보기 --> 그래도 없으면 내가 만들기!

 

항상 뭔가를 배울 때 이것을 왜 사용하는가를 알아야 한다!!

기본형 변수 참조형 변수
기본형 데이터(정수, 실수, 문자1, 논리) 기본형데이터를 제외한 나머지(배열, 클래스)
변수에 해당타입의 "값이 저장됨 값이 들어가있는 위치를 나타내는 "주소"가 저장됨
초기화 값: 0 초기화 값: null

 

변수: 하나의 변수에 하나의 데이터 만을 저장, 하나의 변수마다 이름과 변수의 타입을 선언해주어야 함

배열: 하나의 이름으로 여러 개의 데이터를 다룰 수 있음. 같은 타입만 넣을 수 있음. 고정된 크기를 가짐(크기변경 불가능)

 

극장예매시스템

수업시간에 만들었던 극장예매시스템을 마치고 다시 만들어보면서 눌렀을 때 리셋되는 버튼도 추가해 보았다.

더보기

코드

package 배열응용;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class 극장예매시스템2 {
	public static void main(String[] args) {
		JFrame f = new JFrame("극장예매 시스템");
		f.setSize(500, 800);
		f.getContentPane().setBackground(Color.DARK_GRAY);

		FlowLayout flow = new FlowLayout();
		f.setLayout(flow);

		Font font1 = new Font("12롯데마트드림Medium", Font.BOLD, 60);
		Font font2 = new Font("12롯데마트드림Medium", Font.BOLD, 20);
		Font font3 = new Font("12롯데마트드림Medium", Font.BOLD, 30);

		JLabel title = new JLabel("영화 예매 시스템");
		title.setForeground(Color.white);
		title.setFont(font1);
		f.add(title);

		JLabel result = new JLabel("예매할 좌석을 누르세요.");
		result.setForeground(Color.white);
		result.setFont(font3);

		JButton[] btn = new JButton[100];
		int[] seat = new int[btn.length];

		JButton reset = new JButton("reset");
		reset.setBackground(Color.pink);

		for (int i = 0; i < btn.length; i++) {
			btn[i] = new JButton(i + "");
			btn[i].setFont(font2);

			f.add(btn[i]);
			f.add(reset);

			btn[i].addActionListener(new ActionListener() {

				@Override
				public void actionPerformed(ActionEvent e) {
					String text = e.getActionCommand();
					System.out.println(text);
					int no = Integer.parseInt(text);
					if (seat[no] == 1) {
						result.setText(text + "번 예매 불가");
						result.setForeground(Color.red);
					} else {
						seat[no] = 1;
						result.setText(text + "번 예매 완료");
						result.setForeground(Color.white);
					} // else
				} // if
			});
		} // for

		// 리셋눌렀을 때 리셋되는거해보기
		reset.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				for (int i = 0; i < seat.length; i++) {
					if (seat[i] == 1) {
						seat[i] = 0;
					} // if
				} // for
				JOptionPane.showMessageDialog(f, "결제를 취소합니다.");
				result.setText("예매할 좌석을 누르세요.");
			}
		});

		f.add(result);

		JButton total = new JButton("전체 예매 내역");
		total.setBackground(Color.LIGHT_GRAY);
		total.setForeground(Color.black);
		f.add(total);

		JLabel result1 = new JLabel();
		result1.setForeground(Color.white);
		result1.setFont(font3);
		f.add(result1);

		total.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				int count = 0;
				for (int x : seat) {
					if (x == 1) {
						count++;
					} // if
				} // for
				JOptionPane.showMessageDialog(f, (count * 10000) + "원 결제하시면 됩니다.");
			}
		});

		f.setVisible(true);
	}
}

 


2023.02.14

Set 내가 따로 값을 넣어주는

Get 이미 들어가 있는 데이터를 가지고 오는

 

public: 다른 패키지에서도 접근 가능하게 설정(접근제어자)

성질 : 멤버변수

동작 : 멤버메서드(함수와 동일), 동적인 기능을 수행

멤버변수 선언이 클래스 바로 아래에 되면 클래스전체 영역에서 이 변수를 사용할 수 있음.(전역변수)

전역변수는 자동초기화된다.

 

외부에 있는 파일, 네트워크, cpu 등을 자바에서 연결할 때는 아주 위험한 상황이라고 인식하기 때문에 이 상황에서 문제가 발생하면 어떻게 처리할지를 써주어야 함 (try-catch 사용)


2023.02.15

강사님께서 코드짤 때 많은 사람들에게 보여주면 집단지성의 힘으로 실수를 줄일 수 있다고 하셨다!

실수한 것은 그냥 실수일 뿐이고 코드를 보여주는 것을 두려워하지 말라고도 해주셨다.

 

자바는 메서드 이름을 입력 값이 다르면, 동일하게 써도 된다. == 하나의 이름으로 다양한 형태를 구현 가능하다.

이를 다형성(오버로딩 overloading) 이라고함.

ctrl + spacebar를 눌렀을 때 여러 유형으로 나오는 것도 다형성 이래!

 

클래스를 복습하고 메서드 연습을 하였다. 생성자도 조금 진도가 나갔다.

코드를 for문이나 배열 등을 이용해서 짧고 예쁘게 만드는 것을 "튜닝"한다라고 표현하시더라!

강사님이 튜닝하는 것을 보니 나도 해보고 싶어 져서 나도 한번 해봤다! 그리고 할인기능도 추가했다.

더보기

코드

package 생성자맛보기;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class 음식주문정보시스템5 {
	//튜닝, 할인기능 추가

	static int[] count = new int[4];

	final static int[] PRICE = { 1000, 6000, 5000, 5500 };// 짬뽕 우동 짜장

	static String[] food = { "짬뽕", "우동", "짜장" };
	static String[] icons = { "111.png", "222.png", "333.png" };
	static JButton[] buttons = new JButton[3];
	static JLabel[] labels = new JLabel[3];
	static String[] text = { "개수: ", "", "결제금액: 0원" };

	public static void main(String[] args) {
		JFrame f = new JFrame();
		f.setTitle("중국집 주문 키오스크");
		f.setSize(600, 500);
		f.getContentPane().setBackground(Color.black);

		FlowLayout flow = new FlowLayout();
		f.setLayout(flow);

		Font font = new Font("12롯데마트드림Medium", 1, 20);

		for (int i = 0; i < labels.length; i++) {
			labels[i] = new JLabel(text[i]);
			labels[i].setFont(font);
			labels[i].setForeground(Color.white);
		}
		ImageIcon icon = new ImageIcon("home.png");
		labels[1].setIcon(icon);

		JButton number = new JButton("0개");
		number.setFont(font);
		number.setForeground(Color.white);
		number.setBackground(Color.gray);

		for (int i = 0; i < food.length; i++) {
			buttons[i] = new JButton(food[i]);
			buttons[i].setFont(font);
			buttons[i].setBackground(Color.darkGray);
			buttons[i].setForeground(Color.white);
			f.add(buttons[i]);

			buttons[i].addActionListener(new ActionListener() {
				
				@Override
				public void actionPerformed(ActionEvent e) {
					String name = e.getActionCommand();
					int index = 0;
					if (name.equals("짬뽕")) {
						index = 1;
					} else if (name.equals("우동")) {
						index = 2;
					} else {
						index = 3;
					}
					ImageIcon icon = new ImageIcon(icons[index - 1]);
					labels[1].setIcon(icon);
					count[0]++;
					number.setText(count[0] + "개");
					count[index]++;
					f.setTitle("짬뽕: " + count[1] + "개, 우동: " + count[2] + "개, 짜장: " + count[3] + "개");
					int total = 0;
					for (int j = 1; j < count.length; j++) {
						total = total + (count[j] * PRICE[j]);
					}
					labels[2].setText("결제금액: " + total + "원");
					if (count[0] >= 5) { // 5그릇 단위로 1000원 할
						int discount = (count[0] / 5) * PRICE[0];
						total = total - discount;
						labels[2].setText(discount + "원 할인 =>  " + "결제금액: " + total + "원");
					}
				}
			});
		}

		f.add(labels[0]);
		f.add(number);
		f.add(labels[1]);
		f.add(labels[2]);

		f.setVisible(true);
	}

}

2023.02.16

자바의 메모리 구조

- 기본생성자: 눈에 보이지는 않지만(묵시적) 만들어져 있음, 객체를 생성할 때마다 이 메서드를 자동으로 호출함.

기본생성자를 눈에 보이게(명시적으로) 만들 수 있음.

source -> Generate Constructors from Superclass -> generate 누르기

 

- 파라미터가 있는 생성자가 있을 때는 기본생성자는 자동생성 되지 않음.

source -> Generate Constructors using Fields ->generate 눌러서 생성해 주기!

객체생성할 때마다 꼭 처리하고 싶은 내용이 있으면 생성자 메서드 내에서 써주세요.

객체생성할 때 생성자 메서드가 자동호출되기 때문에 무조건 처리해 줌.

 

- toString: 재정의 하는 것으로 주소대신 다른 결과를 내 보낼 수 있게 해 줌.

source -> Generate toString() -> generate 누르기

 

멤버변수 ==> 객체생성할 때마다 다이나믹하게 무더기영역(heap)에 생긴 변수, 인스턴스 변수라고도 부른다.

 

- static변수는 하나의 변수를 만들어 값을 공유할 목적으로 만든다.

- static메서드는 객체를 생성하지 않고, 바로 특정한 기능을 자주 사용할 목적으로 만든다.

          객체 생성하지 않고 클래스 이름으로 바로 접근하고 싶을 때 static메서드를 만들어 준다.

          static메서드에서 전역변수를 접근할 때는 같은 성격을 가진 static변수만 접근이 가능


2023.02.17

대학교 졸업식 때문에 9-10시 수업을 듣고 외출 갔다가 2-6시 수업을 들었다.

못 들은 사이에 다른 분들은 시험을 쳐서 시험에 응시하지 못한 나는 다음 주 월요일 빠진 사람들과 함께 응시하기로 했다. 강사님께서 시험 치기 전 수업 요약정리를 함께 해주셨었다고 한다. 다행히도 그 자료를 그날 듣지 못한 사람들에게도 보내주셨다!! 강사님 최고🤍

 

뒤에 와서 들은 수업에서  https://www.diagrams.net/ 사이트로 상속 UML을 그리는 것을 해보았다.

저 사이트는 벤다이어그램 등을 그릴 수 있는 사이트로 실무에서도 많이 쓰인다고 하셨다.

상속확인문제 UML 그리기!

메인클래스:볼펜Main.java

부모클래스: 학용품.java ----가격, 회사, 사다()

자식클래스: 볼펜.java ----두께, 글을쓰다()

내가 그린 UML

 

시험 전 정리!

더보기

1. 생성자- <like 벽돌!!!>, 틀을 가지고 부품 (객체, 인스턴스, 실제)을쓰게 .

              객체생성(new)

              new키워드로 "객체 생성시 자동호출"해서

              객체생성시  처리하고 싶은 내용을 넣어주면

              무조건 처리할  있도록   있음.

              "멤버변수  넣어주는 처리를 생성자 메서드 해주면 좋겠음."

              new Car(); ==> 클래스이름과 동일하게 만들어야 !

 

2. static- <like망치!!!>, cpu 조립할  언제든지 자주 사용해서

            사용할  있게 미리 준비가 되어있는 상태의 변수/메서드

            클래스이름 접근해서 사용가능한 변수/메서드

            ==> static 변수- Color.red, Font.BOLD

            ==> static 메서드- Integer.parseInt(), String.valueOf()

                                         JOptionPane.showInputDialog()

            ==> public static void main(String[] s) {}

                  static메서드 안에서메서드안에서 사용하는 전역변수는 반드시 static변수만 가능

 

3. 상속 맛보기 - <기존의 자동차에 날개를 만들어 붙이자 è 하늘을 나는 자동차>,

              상속은 재사용하기위해 기존의 것에 살을 붙이는 (+a)

               Car <--- FlyCar (Car 만들어서 FlyCar 만들  Car 재사용(상속)해보세요)

               Car: String color; public void run()

               FlyCar: boolean fly; public void fly()

               FlyCar사용.java에서 FlyCar fly = new FlyCar();

 

 

1주차   기술 기초         (클라이언트(브라우저) 삼총사)

              1) 사이트에 들어가는 내용(데이터) : html

                              ==> 페이지 연결 역할: <a href="연결할 페이지의 주소">태그

                              ==> a태그는 href속성이 반드시 필요!

                              외의 태그: <table>, <br> 

              2) 사이트의 스타일: css

                ==> css 하나를 만들어 두고 여러 html 연결해서 동일한 스타일을 적용

                              ==> html안에 css파일을 연결할  사용하는 태그는 <link>

                              외의 css: background yellow;

              3) 사이트의 동적인 "처리": 자바스크립트(js)

                              ==> html문서 안에여러 개의 css, js 연결하여 사용할  있다.

                              ==> html문서의  수는 제약이 없음.

 

2주차 - 자바 프로그램의 기초

               1)변수:

                             - 기본형 데이터(정수, 실수, 문자1, 논리) - 변수에 "" 저장

                             - 참조형 데이터(기본형 제외한 나머지 모두)- 변수에 "주소" 저장

                                                ==> (배열, 클래스, 객체, 컬렉션(모음))

               2)연산자(기호) : 산술(+ - * / %), 비교(== != >= >), 논리(&& || !), 대입(=), 결합(+)

              3)제어문 : 순차문(입력--> 처리--> 출력), 조건문, 반복문

              4)배열: 많은 양의 데이터를 다루기 위한 부품

                    int[], char[] 기본형 배열, String[], JButton[] 참조형 배열

                              String[] s; //s 주소가 들어가 있음.(참조형일 !)

                     ==> 배열은 기본형, 참조형  만들어   있다.

                             단점) 크기가 고정, 같은 타입의 많은 양만 다룰  있다.

                       ==> 컬렉션(많은 , 크기를 조정, 다른 타입의 많은 양의 데이터를 다룰  있다.)

                                ArrayList("순서" 정할  있다.)

                                HashSet("중복을 제거"해준다.)

                              HashMap("+값으로 쌍으로 저장"  있다.) ex) {"사과" :"apple", "바나나" : "banana"}

 

3주차 - 자바 프로그램의 기본

              5)클래스/객체 : 클래스() 가지고 찍어낸 실제(객체)

                                클래스를 만들  2가지 요소

                                1) 속성(성질) - 멤버변수

                                2) 동작(기능, 처리) - 멤버메서드, (다른 언어에서의 함수와 일치!!)

                                   메서드는 반환값이 없으면 void라고 써준다.

                                   메서드는 반환값이 있으면 return 반환되는 데이터의 타입의 키워드를 함께 써준다.

                                            ==> void return 함께   없음.

                                           //반응 없음(void)

                                                             public void off(){

                                                                        System.out.println("불을 끕니다.");

                                                             } // 불만 끄고 메인에 뭔가 준거는 없음.

                                           //반응을 보임(return)

                                                           public String rice(){

                                                                        return "쿠쿠가 취사를 시작합니다.";

                                                          }  // 메인에게 쿠쿠가 취사를 시작합니다. 라고 반환(반응)

              6)상속 : 기존에 있었던 클래스를 재사용해서 새로운 클래스를 만드는 .

                             물려주는 클래스(부모, 수퍼클래스)

                             물려받는 클래스(자식, 서브클래스)

                             단일상속만 가능 (부모는 하나만 가능하다는 )

              7)자바는 객체지향형 프로그래밍(Object oriented Programming, OOP)

               <---> 절차지향형 프로그래밍(ex) c언어

 

수업 끝나고 강사님이 보내주신 정리와 강의 영상 보면서 혼자서 공부했다..


--면접 때 물어볼 수도 있는 질문--

1. 배열을 왜 사용하는가?

하나의 이름으로 여러 개의 데이터를 다룰 수 있어 많은 양의 데이터를 한 번에 처리할 수 있기 때문에 사용한다.

 

2. OOP가 무엇인가요? 

객체지향형 프로그래밍을 뜻하며 컴퓨터 부품을 조립하듯 문제를 여러 개의 객체 단위의 부품으로 나눠 작업하는 방식을 뜻합니다. 예로는 Java, C++, C#이 있습니다.

 

3. 절차지향과 객체지향의 차이점

절차지향 프로그래밍 실행하고자 하는 절차를 정하고, 이 절차대로 프로그래밍하는 방법을 의미합니다.
부분오류가 전체수정으로 이어질 수 있어 유지보수가 어렵다.
객체지향 프로그래밍 하드웨어 조립 하듯이, 필요한 객체를 조립하는 프로그래밍 기법을 의미합니다.
같은 기능을 반복적으로 연산하지 않고, 코드 재사용률이 높아 유지보수가 쉽다.

 

4. OOP(객체지향프로그램) 특징 ==> 정보처리기사 단골분제

특징 설명
추상화 구체적인 부품을 클래스라는 것으로 추상적으로 표현
캡슐화 부품의 세부적인 동작 방식이 은닉되어 있는 것
상속 부품을 재사용하여 새로운 부품을 만드는 것
다형성 하나의 이름으로 다양한 형태를 사용할 수 있는 것

 

5. 자바의 메모리(RAM) 구조?

자바의 메모리 구조는 클래스의 원본영역, Stack영역, Heap영역으로 이루어져 있으며 클래스의 원본영역에는 멤버변수(instance), 멤버메서드, 정적변수(static)가 있다.

 

6. 스레드 사용해 보셨나요? 어떤 순서대로 사용하나요?

     1) 동시에 실행하고 싶은 Thread 클래스들을 만든다.(extends Thread) --> 

     2) 각각 run() 메서드를 오버라이드한다. -->

     3) Thread를 사용하는 클래스를 만들어  new를 이용하여 객체를 생성한다. -->

     4) 생성한 객체의 start() 메서드를 호출한다.

 

7. 자바는 단일상속인가요 다중상속인가요?

단일상속입니다.

 

8. 크롤링 경험 유무..! 

 


또 이렇게 늦게 써버렸다.. 다음부터는 하루마다 쓸까 싶다. 이렇게 모아 쓰는 것도 힘들어서 매일 수업 중에 정리하고, 수업 끝나고 정리한것을 토대로 블로그에 옮길 수 있으면 해야겠다.

 

다들 노션을 쓰더라... 나도 노션으로 옮길까?.. 노션은 디자인도 예쁘더라.... 더 고민해 봐야겠다.

 

정리하는 방법 찾아봤는데 나는 그렇게 딱 형식 맞춰서 간결하게 정리할 수가 없는 것 같다.

다른 분들 회고록도 봤는데 어떤 분은 정보 글 위주로, 어떤 분은 계획이나 한 일위주로, 어떤분은 코드 위주로 적으셔서 다다르더라... 나는 하나씩 해봐야겠다!!

글도 쓰다 보면 늘겠지 하는 마음으로 꾸준히 해봐야겠다.