2021/01/13 - [공부/자바(java) 융합개발자 2차(복습)] - [1일차] 복습 & 자바 기본 익히기(p.18~)
2021/01/15 - [공부/자바(java) 융합개발자 2차(복습)] - [복습] 2일차 복습 - 자바 기본(for, while, do ~ while, 이중 for문)
2021/01/15 - [공부/자바(java) 융합개발자 2차(복습)] - [복습] 3일차 복습 - 자바 기본(21일차 배열, 난수)
이전 복습 내용
2021/01/13 - [공부/자바 복습] - [자바 기초] 이지스퍼블리싱 Do it! 공부단 신청
|
1. 스터디 노트 쓸 때 글 상단에 책 DB 꼭 넣기
2. 공부한 페이지 쪽수 + 제목 잘 짓기
[Do it! 공부단] 스터디노트-1. 첫째 마당 자바 기본 익히기( ~ p.)
3. 책상 사진(모니터 나오게) 첨부
4. 실습 완료 자료 첨부 파일로 올리기
5. 최소 200자 이상 글 쓰기
6. 계획한 기간(~2/1) 까지 3회 이상 스터디 노트 업로드
7. 공부단에 참여해 스터디를 완료한 도서의 서평을 온라인 서점에 올립니다(예스, 알라딘, 교보 택1)
8. 공부단 목표 달성 시 [공부단 수료 도서 신청] 게시판에 완료글 올리고, 완료 설문 제출
'Do it! 공부단' 운영 규칙을 읽어주세요!
① Do it! 스터디룸의 공부단은 일반 서평단이 아닙니다. 스스로 학습을 계획하고 공부하는 분들을 위한 이지스퍼블리싱의 학습 지원 프로그램입니다.
② 한 번에 하나의 공부단을 신청할 수 있습니다.
③ 원하는 도서를 기준으로 3회 이상의 학습 계획을 세우고 공부단을 신청하세요. V
④ 스터디 노트 작성법에 맞춰 하루에 하나씩 스터디 노트를 카페와 블로그에 기록해 주세요. 벼락치기는 안돼요.
⑤ 공부단을 완료하면 바로 책 선물을 신청하세요.
⑥ 완료 양식 제출까지 마치면 담당자가 확인하여 2-3일 내에 회신을 드립니다.
⑦ Do it! 공부단은 월 3회까지만 신청이 가능합니다. 너무 잦은 신청은 반려될 수 있습니다.
[출처] ⭐Do it! 공부단 참여/활용 안내⭐(20.10.20) (Do it! 스터디룸) | 작성자 이지스
2021/01/14 - [분류 전체보기] - [자바 기초] 22일차 2 - 클래스, 객체
2021/01/15 - [공부/자바(java) 융합개발자 2차] - [자바 기초] 23일차 - 클래스
오늘 복습할 내용
[Do it! 공부단] 스터디노트-2. 둘째 마당 객체 지향 프로그래밍(p.126 ~)
둘째 마당. 객체 지향 프로그래밍
- 자바의 핵심
05 클래스와 객체 1
- 객체 지향 프로그램 -
세상의 모든 일은 사물간의 협력으로 이루어진다.
사물의 흐름과 움직임을 중심으로 프로그래밍
그 시작에 클래스가 있다.
클래스부터 살펴보자
1. 객체 지향 프로그래밍과 클래스
[객체와 객체 지향 프로그래밍]
- 객체 : 의사나 행위가 미치는 '대상'
ex) 사람, 자동차, 건물 등 눈에 보이는 사물
ex) 주문, 생산, 관리 등 어떤 행동을 나타내는 단어, 즉 눈에 안 보이는 것도 객체가 될 수 O
- 자바 객체 지향 프로그래밍(Object-Oriented Programming; OOP) : 객체를 기반으로 하는 프로그램
-> 어떤 대상(객체)을 가지고 프로그래밍 한다
[생활 속에서 객체 찾아보기]
아침에 일어나서 학교에 간다
- 아침에 일어난다 -> 씻는다 -> 밥을 먹는다 -> 버스를 탄다 -> 요금을 낸다 -> 학교에 도착한다
- 절차 지향 프로그래밍 : 이렇게 순서대로 일어나는 일을 시간순으로 프로그래밍 하는 것 ex) C언어
↔ 객체 지향 프로그래밍 : 객체를 정의 -> 객체 간 협력을 프로그래밍 하는 것
객체 : 학생, 밥, 버스, 학교
- 밥을 먹는다 : 학생 객체 - 밥 객체의 먹는 협력
- 버스를 탄다 : 학생 객체 - 버스 객체에 타는 행동
① 객체를 만들고
② 객체 사이에 일어나는 일을 구현하는 것 : 각 객체가 어떤 기능을 제공하고 객체 간 협력을 어떻게 구현할 것인지
[클래스란?]
- 객체 지향 프로그래밍 : 클래스를 기반으로 한다
- 클래스 : 객체의 속성과 기능을 코드로 구현한 것
- 클래스를 정의한다 : 객체를 클래스로 구현하는 것
① 클래스 이름
② 클래스가 가지는 속성 또는 특성 필요
Ex) '학생' 객체 살펴보기
- 학생 객체를 표현할 클래스의 '이름' 필요 : Student
- 학생 객체가 가지는 일반적인 속성(특성) : 학번, 이름, 학년, 사는 곳 등 -> 클래스 내부에서 변수로 선언 : 멤버변수
- 클래스를 정의하는 문법
(접근제어자) class 클래스이름 {
멤버 변수;
메서드;
}
public class Student {
}
public 예약언는 '접근 제어자'라고 한다.
public class 일 때는 클래스 이름과 자바 파일 이름이 같아야 한다.
객체지향<-> 절차적
(재사용성)
ex) 클래스 / 객체
붕어빵 틀 붕어빵
설계도 아파트
앵무새 로니, 망고, 태양이..
사람 가을이, 로운이
붕어빵 틀(클래스)을 통해 똑같은 모양의 붕어빵(객체)을 만든다
클래스, 객체 용어 알기!
- 클래스 : 추상적, 일반적
- 객체 : 추상적인 클래스로 만들어진 구체적인 것
사람의 특징을 담아서 만들어진'나'
클래스 객체
따라서 클래스를 먼저 정의해 주어야 한다
프로그램으로 클래스를 정의할 때
-> 속성 + 행위 정의
-> 멤버변수 + 메소드(함수)
- 학생 클래스 정의하기
package com.day01; // package 선언
public class Student { // class를 만드는 예약어 class 뒤에 클래스 이름 Student
/*학생 객체의 속성 중 프로그램에서 사용할 객체의 속성을 클래스의 변수로 선언
* 아래 네 개의 멤버 변수 선언 -> 각 속성에 맞는 자료형 사용
* 모든 요소가 클래스 내부에 있어야 하며,
* 클래스 외부에는 package 선언, import 문장 외에 아무 것도 선언하지 않는다.
*/
int studentID; //학번
String studentName; //학생 이름
int grade; //학년
String adress; //사는 곳
}
- 클래스를 만들 때는 class 예약어 사용
- class 예약어 뒤에 클래스 이름인 Student를 적어주고 { } 내에 클래스 내용을 구현
- 학생이라는 객체의 속성 중 프로그램에서 사용할 객체의 속성을 클래스의 변수로 선언(멤버 변수)
- 모든 요소가 클래스 내부에 있어야 함
- 클래스 외부에는 package 선언과 import 문장 외에 아무 것도 선언하지 않음
1분 복습
사람 객체를 구현하는 Person 클래스를 만들고 이름, 나이, 성별을 멤버 변수로 정의해 보세요.
package com.day01;
public class Person {
String name;
int age;
char gender;
}
1) 클래스 이름 짓는 규칙
- 대문자로 시작한다 (소문자로 시작해도 오류 발생X -> 개발자들 사이의 규칙 : 코딩 컨벤션)
코딩 컨벤션(coding convension) : 코딩을 할 때 읽기 쉽고 이해하기 쉽도록 정한 규칙
ex) 클래스의 이름은 대문자로 시작한다
- 소셜 컨벤션(social convention)이 사회적 관습을 뜻하는 것처럼 코딩 동네에서는 이런 규칙을 코딩 컨벤션이라 한다
2. 클래스 살펴보기
[클래스 속성을 구현하는 멤버 변수]
멤버변수(member variable, 속성, 특성) : 클래스 내부에 선언하여 객체 속성을 나타내는 변수
ex) Student 클래스 내에 학번, 이름, 학년, 사는 곳.. 같은 객체가 가지는 속성을 변수로 선언햇음
package com.day01;
public class Student {
//아래 네 개의 ★멤버 변수 선언★
int studentID; //학번
String studentName; //학생 이름
int grade; //학년
String adress; //사는 곳
}
Student 클래스의 멤버 변수 : studentID, studentName, grade, adress
- 멤버 변수는 속성(property), 특성(attribute) 등으로 표현하기도 함
- 멤버 변수는 속성이 무엇이냐에 따라 알맞은 자료형을 선언해 주어야 함
속성 |
자료형 |
변수 이름 |
설명 |
학번 |
int |
studentID |
정수로 나타낼 수 있기 때문에 int형으로 선언 |
이름 |
String |
studentName |
학생 이름은 A같은 하나의 문자가 아니라 여러 개의 문자로 이루어진 문자열 -> String 클래스 사용 |
학년 |
int |
grade |
정수로 나타낼 수 있기 때문에 int형으로 선언 |
사는 곳 |
String |
address |
문자열을 나타내기 위해 String 사용 |
<사람 객체를 구현하는 Person 클래스 만들기>
- 속성 : 이름, 키, 몸무게, 성별, 결혼 여부
package com.day01;
public class Person {
String name; //이름
int height; //키
double weight; //몸무게
char gender; //성별
boolean married; //결혼 여부 True, False
}
- Person 클래스의 멤버 변수로 이름, 키, 몸무게, 성별, 결혼 여부를 선언
-> int형, double형 같은 기본 자료형(primitive data type)으로 선언할 수도 있고, 또 다른 클래스형(객체 자료형 or 참조 자료형)으로 선언할 수도 있다.
<변수의 자료형>
1. 기본 자료형
- int, long, float, double 등
2. 참조 자료형
- String, Date 같은 JDK에서 제공하는 참조 자료형
- Student, Person 등 개발자가 직접 만든 클래스가 다른 클래스에서 사용하는 멤버 변수의 자료형이 될 수 있음
[클래스 기능을 구현하는 메서드]
- 앞에서는 클래스를 선언하고 클래스 속성(멤버 변수)을 선언 했다.
- 클래스에서는 학생이라는 객체가 가지는 속성을 사용해 학생과 관련된 기능을 구현할 수 있다.
ex) 학생에게 이름을 부여한다, 학생이 사는 곳을 출력한다
- 멤버 함수(member function) 또는 메서드(method) : 클래스 내부에서 멤버 변수를 사용하여 클래스 기능을 구현한 것
예제 : 학생 이름과 주소를 출력하는 메서드 만들기
public void showStudentInfo() { //이름, 주소 출력하는 메서드 추가
System.out.println(studentName + ", " + address); //이름, 주소 출력
}
=>
package com.day01; // package 선언
public class Student { // class를 만드는 예약어 class 뒤에 클래스 이름 Student
int studentID; //학번
String studentName; //학생 이름
int grade; //학년
String address; //사는 곳
public void showStudentInfo() { //이름, 주소 출력하는 메서드 추가
System.out.println(studentName + ", " + address); //이름, 주소 출력
}
}
- Student 클래스 안에 showStudentInfo() 메서드 추가 : 학생 이름, 주소를 출력하는 기능
<Baby라는 클래스 만들기> : 속성 + 행위
- 이름, 나이 : 멤버 변수
- 웃는다, 운다 : 메서드
package com.day03;
public class Baby {
String name; //이름
int age; //나이
//웃는다
public void smile() {
System.out.println("웃는다");
}
//운다
public void cry() {
System.out.println("운다");
}
}
여기 까지가 Baby 클래스
그러나 실행될 수 없으므로 실행이 가능하도록 객체를 만들어 주어야 한다.
public static void main(String[] args) {
Baby b1 = new Baby();
}
=> b1이라는 객체가 생겼다.
package com.day03;
public class Baby {
String name; //이름
int age; //나이
//웃는다
public void smile() {
System.out.println("웃는다");
}
//운다
public void cry() {
System.out.println("운다");
}
public static void main(String[] args) {
Baby b1 = new Baby();
}
}
=> b1이 운다
package com.day03;
public class Baby {
String name; //이름
int age; //나이
//웃는다
public void smile() {
System.out.println("웃는다");
}
//운다
public void cry() {
System.out.println("운다");
}
public static void main(String[] args) {
Baby b1 = new Baby(); // b1이라는 객체 생성
b1.cry(); // b1이 운다
}
}
=> b1이 웃는다
public static void main(String[] args) {
Baby b1 = new Baby();
b1.smile();
}
웃는다
클래스 만들고 -> 이를 실행하기 위한 객체를 생성 -> 실행
=> b1이라는 객체의 이름은 홍길동으로 하고 객체의 이름을 출력하라
package com.day03;
public class Baby {
String name; //이름
int age; //나이
//웃는다
public void smile() {
System.out.println("웃는다");
}
//운다
public void cry() {
System.out.println("운다");
}
public static void main(String[] args) {
Baby b1 = new Baby();
b1.name = "홍길동";
System.out.println(b1.name);
}
}
홍길동
=> 웃는다, 운다 외에 info라는 메서드를 만들어서 객체의 이름, 나이가 출력되도록 하라
public void info() {
System.out.println("이름 : " + name);
System.out.println("나이 : " + age);
}
public static void main(String[] args) {
Baby b1 = new Baby();
b1.name = "홍길동";
b1.age = 10;
b1.info();
}
package com.day03;
public class Baby {
String name; //이름
int age; //나이
//웃는다
public void smile() {
System.out.println("웃는다");
}
//운다
public void cry() {
System.out.println("운다");
}
public void info() {
System.out.println("이름 : " + name);
System.out.println("나이 : " + age);
}
public static void main(String[] args) {
Baby b1 = new Baby();
b1.name = "홍길동";
b1.age = 10;
b1.info();
}
}
이름 : 홍길동
나이 : 10
=> 두 번째 객체 b2를 만들고 이름은 이순신, 나이는 5살로 하고 b2의 정보를 출력하라.
package com.day03;
public class Baby {
String name; //이름
int age; //나이
//웃는다
public void smile() {
System.out.println("웃는다");
}
//운다
public void cry() {
System.out.println("운다");
}
public void info() {
System.out.println("이름 : " + name);
System.out.println("나이 : " + age);
}
public static void main(String[] args) {
Baby b1 = new Baby();
b1.name = "홍길동";
b1.age = 10;
b1.info();
Baby b2 = new Baby();
b2.name = "이순신";
b2.age = 5;
b2.info();
}
}
이름 : 홍길동
나이 : 10
이름 : 이순신
나이 : 5
이처럼 하나의 객체를 만들면 그에 해당하는 클래스를 모두 쓸 수 있다.
<이름 name, 주소 addr을 가지고 공부하다 study()라는 행위를 하는 Person 클래스를 생성하시오>
package com.day01;
public class Person {
String name; //이름
int height; //키
double weight; //몸무게
char gender; //성별
boolean married; //결혼 여부 True, False
String addr;
public void study() { // 메서드 추가
}
}
=> 이것만 가지고는 실행 불가능, 따라서 출력문 적어주기
package com.day01;
public class Person {
String name; //이름
int height; //키
double weight; //몸무게
char gender; //성별
boolean married; //결혼 여부 True, False
String addr;
public void study() {
System.out.println(name + " 공부하다");
}
}
<MainTest.java에 main을 만들고 객체 만들어 주기>
- Person의 객체 p의 이름은 강감찬이고 공부를 한다. 사는 곳은 부산이며 그의 주소를 출력하라.
- Baby의 객체 b는 웃는다.
package com.day01;
public class MainTest {
public static void main(String[] args) {
Person p = new Person();
p.name = "강감찬";
p.study();
p.addr = "부산";
System.out.println(p.addr);
Baby b = new Baby();
b.smile();
}
}
강감찬 공부하다
부산
웃는다
=> 객체는 어디에나 만들어 주어도 상관 없다.
꼭 그 클래스 안에 있어야만 하는 것이 아니다.
[패키지란?]
패키지 : 클래스 파일의 묶음
- 패키지를 만들면 프로젝트 하위에 물리적으로 디렉터리가 생성 됨
- 패키지는 계층 구조를 가질 수 있다 -> 계층 구조를 구성하는 것은 전체 프로젝트의 소스 코드를 어떻게 관리할지와 관련이 있다.
ex) 학교과 관련된 프로젝트 수행
- 클래스 : 학생, 과목, 교실, 담당 교수, 학과 등
- 위의 클래스와 협력하는 여러 다른 클래스가 있을 수 있다.
<-
Student, Course 등 기본이 되는 클래스를 기반으로 그 하위의 협력 클래스를 패키지로 구분하여 구성한 모습
패키지는 단순히 클래스의 묶음이 아닌 프로젝트 전체 소스 코드를 구성하는 계층 구조가 되고, 이 계층 구조를 잘 구성해야 소스 코드 관리와 유지 보수가 편리하다.
1) 패키지 선언하기
- 클래스의 패키지 선언은 맨 위에서 한다.
- 클래스 이름은 StudentView이지만 클래스의 전체 이름(class full name)은 domain.student.view.StudentView
- 클래스 이름이 같다고 해도 패키지 이름이 다르면 다른 클래스 전체 이름이 다른 것 -> 다른 클래스
-> 같은 이름의 클래스라도 다른 패키지에 속해 있으면 서로 연관 X
3. 메서드
- 함수(function)의 한 종류
[함수란?]
- 하나의 기능을 수행하는 일련의 코드
- 어떤 기능을 수행하도록 미리 구현해 놓고 필요할 때마다 호출하여 사용
ex)
① 숫자 두 개를 입력받아 더한다
② 가장 좋은 성적 두 개를 더한다
③ 두 거리를 더한다
-> 세 경우 각각 프로그램으로 구현하는데 사실 두 수를 더해서 값을 보여 준다는로 같은 기능을 수행
-> 더하기 기능을 수행하는 코드를 묶어 '더하기 함수'로 만들고 -> 더하기 기능이 필요할 때마다 이 함수를 불러서 연산
[함수의 입력과 반환]
- 함수 : 이름이 있고 입력 값과 결과 값을 갖는다.
- 함수에 이름을 붙일 때는 의미를 알 수 있는 단어 사용 ex) 두 수를 더하는 함수 : add
- 더할 두 수는 각각 num1, num2로, 함수의 입력으로 받는 변수 : 매개 변수
- 두 수를 더한 결과 값을 result 변수에 저장하여 결과를 반환한다 : 반환 값
[함수 정의하기]
<더하기 함수를 실제 코드로 작성하기>
- 함수가 하는 일을 코드로 구현하는 것 : 함수를 정의한다
1) 함수 이름 add
- 반수 반환형을 적어주고 함수 이름을 적어준다.
- 함수 이름은 변수 이름처럼 프로그래머가 임의로 만들면 되는데, 함수 기능과 관련 있게 만들어야 나중에 호출하거나 이해하기 좋다.
2) 매개 변수 num1, num2
- add 함수 : 두 값을 더하는 일을 함 -> 먼저 함수에 더할 두 값이 입력되어야 하는데, 이 두 값은 함수를 호출할 때 괄호 안의 자료형에 맞게 함수에 전달 된다.
- 함수는 넘겨받은 값으로 덧셈을 수행 -> 함수 내부에서 사용할 괄호 안의 변수 : 매개변수
매개변수가 필요 없는 함수
int getTenTotal() {
int i;
int total = 0;
for(i=1; i<=10; i++) {
total += i;
}
return total; //1부터 10까지 더한 값을 반환
}
- getTenTotal() 함수는 1부터 10까지 더한 합을 반환하는 함수 -> 전달할 값 즉, 매개 변수가 필요하지 않음
-> 수행한 결과 값만 존재한다.
3) return 예약어와 반환형
- return : '이 함수의 결과 값(반환 값:result)을 반환합니다'를 뜻하는 예약어
-> 즉, return 예약어를 사용해서 함수 add를 호출했을 때 반환 값 result 값을 반환하는 것
-> 반환 값의 자료형을 반환형이라고 하는데 여기에서 변수 result의 반환형은 정수이므로 ④ 위치에 int라고 적는다.
반환 값이 없는 함수
void printGreeting(Srting name) { //전달 받은 매개변수 name을 사용해
System.out.println(name + "님 안녕하세요"); //인사말 출력
return; //반환값 없음
}
- 반환형이 없다고 해서 반환형을 쓰는 ④ 위치를 비워두면 오류가 난다
-> 반환 값이 없다는 의미로 void(비어 있다는 의미)를 적어 준다.
return 예약어는 함수 수행을 끝내고 프로그램 흐름 중에서 호출한 곳으로 다시 되돌아갈 때 사용할 수도 있다
void divide(int num1, int num2) {
if(num2 == 0) {
System.out.println("나누는 수는 0이 될 수 없습니다");
return; // 함수 수행 종료
} else {
int result = num1 / num2;
System.out.println(num1 + "/" + num2 + "=" + result + "입니다.");
}
}
- divide 함수는 두 수를 매개변수로 전달 받아서 나눗셈을 한 후 몫을 출력하는 함수
-> 만약 나누는 수가 0이면 수행X -> return 예약어로 함수 수행을 종료
-> 이 때 예약어 return은 함수 수행을 종료하는 목적이므로 뒤에 반환값을 적지 않아도 된다.
[함수 호출하고 값 반환하기]
- 지금까지는 함수를 정의, 구현만 하고 직접 사용하지 않았음
-> 이제 두 정수를 더한 후 결과 값을 돌려주는 함수를 만들고, 사용해 보자.
-> 함수를 사용하는 것 : 함수를 호출한다.
add 함수 정의
package classpart;
public class FunctionTest {
public static int add(int n1, int n2) { //add 함수
int result = n1 + n2;
return result; //결과값 반환
}
}
add 함수 호출
package classpart;
public class FunctionTest {
public static int add(int n1, int n2) { //add 함수 정의, 두 개의 매개변수에 int형 값 받음
int result = n1 + n2; // 결과값도 int형
return result; //결과값 반환
}
public static void main(String[] args) {
int num1 = 10;
int num2 = 20;
int sum = add(num1, num2); //add 함수 호출, 반환 값이 int형이므로 결과 값이 저장되는 sum 변수도 int형
System.out.println(num1 + "+" + num2 + " = " + sum + "입니다");
}
}
10+20 = 30입니다
1) 매개변수 살펴보기
- 함수를 호출할 때 넘겨주는 변수 이름과 함수를 구현할 때 사용하는 매개변수 이름은 전혀 상관 없다
- num1, num2는 main() 함수의 변수 -> add(num1, num2)로 쓰면 add()함수에 두 값을 넘겨줄 수 O
- 매개변수 n1, n2는 실제 함수로 넘어온 두 값을 받아주는 역할 -> add()함수에서 새로 정의한 새로운 변수(n1, n2)
-> 함수를 호출할 때 사용하는 변수 이름 ≠ 호출되는 함수에서 사용한 변수는 서로 다른 변수
=> 이름이 같아도 되고 달라도 상관 없다.
[나 혼자 코딩!] 사칙 연산 함수 완성하기
FunctionTest.java 코드에 사칙 연산을 수행하는 함수를 모두 구현하고 결과 값을 출력해봅시다.
내 답
package classpart;
public class FunctionTest {
public static void main(String[] args) {
int num1 = 30;
int num2 = 20;
//함수 호출
int sum = add(num1, num2); //add 함수 호출
System.out.println(num1 + "+" + num2 + " = " + sum + "입니다");
//sub함수
int sub = sub(num1, num2);
System.out.println(num1 + "-" + num2 + " = " + sub + "입니다");
//mul함수
int mul = mul(num1, num2);
System.out.println(num1 + "*" + num2 + " = " + mul + "입니다");
//div함수
int div = div(num1, num2);
System.out.println(num1 + "/" + num2 + " = " + div + "입니다");
}
//함수 정의
//더하기
public static int add(int n1, int n2) { //add 함수
int result = n1 + n2;
return result; //결과값 반환
}
//빼기
public static int sub(int n1, int n2) { //sub함수
int result = n1 - n2;
return result; //결과값 반환
}
//곱하기
public static int mul(int n1, int n2) { //mul함수
int result = n1 * n2;
return result; //결과값 반환
}
//나누기
public static int div(int n1, int n2) { //div 함수
int result = 0;
if(n2 == 0) {
System.out.println("나누는 값은 0이 될 수 없습니다");
} else {
result = n1 / n2;
}
return result;
}
}
30+20 = 50입니다
30-20 = 10입니다
30*20 = 600입니다
30/20 = 1입니다
n2가 0이면
30+0 = 30입니다
30-0 = 30입니다
30*0 = 0입니다
나누는 값은 0이 될 수 없습니다
30/0 = 0입니다 -> 이렇게 출력되는데..
정답 보기
package classpart;
public class FunctionTest_Answer {
public static void main(String[] args) {
int num1 = 10;
int num2 = 20;
int result = addNum(num1, num2);
System.out.println(num1 + " + " + num2 + " = " + result + "입니다");
result = substract(num1, num2);
System.out.println(num1 + " - " + num2 + " = " + result + "입니다");
result = times(num1, num2);
System.out.println(num1 + " * " + num2 + " = " + result + "입니다");
double value = divide(num1, num2); //나누기 결과는 실수라서 double 형
System.out.println(num1 + " / " + num2 + " = " + value + "입니다");
}
public static int addNum(int n1, int n2){
int result = n1 + n2;
return result;
}
public static int substract(int n1, int n2){
int result = n1 - n2;
return result;
}
public static int times(int n1, int n2){
int result = n1 * n2;
return result;
}
public static double divide(double n1, double n2){ // 받을 때 매개변수는 double형으로 받아야 함
double result = n1 / n2; //결과도 double형
return result;
}
}
10+20 = 30입니다
10-20 = -10입니다
10*20 = 200입니다
10/20 = 0.5입니다
[함수 호출과 스택 메모리]
[함수의 장점]
[클래스 기능을 구현하는 메서드]
1) 메서드 구현하기
2) 자바의 이름 짓기 규약
4. 클래스와 인스턴스
[클래스 사용과 main() 함수]
1) 프로그램을 시작하는 main() 함수
2) Student 클래스에 main() 함수 포함하기
3) main() 함수를 포함한 실행 클래스 따로 만들기
[new 예약어로 클래스 생성하기]
[인스턴스와 참조 변수]
1) 객체, 클래스, 인스턴스
2) 인스턴스 여러 개 생성하기
3) 참조 변수 사용하기
[인스턴스와 힙 메모리]
1) 참조 변수와 참조 값
[나 혼자 코딩!]
1. 다음 예제의 클래스를 만들고 결과 값을 출력해 봅시다.
2. 쇼핑몰에 주문이 들어왔습니다. 주문 내용은 다음과 같습니다.
5. 생성자
[생성자란?]
1) 디폴트 생성자
[생성자 만들기]
[생성자 오버로드]
[나 혼자 코딩!] 매개변수가 있는 생성자 추가하기
6. 참조 자료형
[참조 자료형이란?]
7. 정보 은닉
[접근 제어자 살펴보기]
[get(), set() 메서드]
[정보 은닉이란?]
[나 혼자 코딩!] 접근 제어자 연습하기
연습문제
Q1. 클래스를 생성할 때 호출하는 ()는 멤버 변수를 초기화하는 데 사용합니다.
Q2. 클래스를 생성하여 메모리에 있는 상태를 ()라 하고 멤버 변수를 다른 말로 ()라고 합니다.
Q3. ()는 일반 함수에 객체 지향의 개념을 추가하여, 클래스 내부에 선언하고 클래스 멤버 변수를 사용하여 클래스 기능을 구현합니다.
Q4. 05-7에서 예제로 나온 MyDate와 MyDateTest 클래스를 완성해봅시다.
06 클래스와 객체 2
1. this 예약어
[자신의 메모리를 가리키는 this]
[생성자에서 다른 생성자를 호출하는 this]
[자신의 주소를 반환하는 this]
2. 객체 간 협력
[학생 클래스 구현하기]
[버스 클래스 구현하기]
[지하철 클래스 구현하기]
[학생, 버스, 지하철 객체 협력하기]
[나 혼자 코딩!] 택시 타는 과정을 추가로 구현하기
3. static 변수
[변수를 여러 클래스에서 공통으로 사용하려면?]
[static 변수의 정의와 사용 방법]
1) 학번 생성하기
[클래스 변수]
[클래스 메서드]
[클래스 메서드와 인스턴스 변수]
[나 혼자 코딩!] static 변수와 static 메서드 연습하기
4. 변수 유효 범위
[변수 유효 범위란?]
1) 지역 변수의 유효 범위
2) 멤버 변수의 유효 범위
3) static 변수의 유효 범위
[변수 유형에 따른 용도]
1분 복습
다음 빈칸에 알맞은 변수 유형을 적어 보세요.
5. static 응용 - 싱글톤 패턴
[싱글톤 패턴이란?]
[싱글톤 패턴으로 회사 클래스 구현하기]
단계 1 : 생성자를 private으로 만들기
단계 2 : 클래스 내부에 static으로 유일한 인스턴스 생성하기
단계 3 : 외부에서 참조할 수 있는 public 메서드 만들기
단계 4 : 실제로 사용하는 코드 만들기
[나 혼자 코딩!] 싱글톤 패턴으로 클래스 구현 연습하기
연습문제
Q1. 클래스 내부에서 자신의 주소를 가리키는 예약어를 ()라고 합니다.
Q2. 클래스에 여러 생성자가 오버로드 되어있을 경우 하나의 생성자에서 다른 생성자를 호출할 때 ()를 사용합니다.
Q3. 클래스 내부에 선언하는 static 변수는 생성되는 인스턴스마다 만들어지는 것이 아닌 여러 인스턴스가 공유하는 변수입니다. 따라서 클래스에 기반한 유일한 변수라는 의미로 ()라고도 합니다.
Q4. 지역 변수는 함수나 메서드 내부에서만 사용할 수 있고 () 메모리에 생성됩니다. 멤버변수 중 static 예약어를 사용하는 static () 메모리에 생성됩니다.
Q5. 아침 출근길에 김 씨는 4,000원을 내고 별다방에서 아메리카노를 사 마셨습니다. 이 씨는 콩다방에서 4,500원을 내고 라테를 사 마셨습니다. '06-2 객체 간 협력'을 참고하여 이 과정을 객체 지향으로 프로그래밍해 보세요.
Q6. 카드 회사에서 카드를 발급할 때마다 카드 고유 번호를 부여해 줍니다. 06-3의 <학번 생성하기>예제를 참고하여 카드가 생성될 때마다 카드 번호가 자동으로 증가할 수 있도록 카드 클래스를 만들고 생성해 보세요.
Q7. Q6에 구현한 내용에서 카드 회사 클래스 CardCompany를 싱글톤 패턴을 사용하여 구현해 보세요.
07 배열과 Array List
1. 배열이란?
[자료를 순차적으로 관리하는 구조, 배열]
[배열 선언과 초기화]
[배열 사용하기]
1) 인덱스 연산자[]
2) 배열 순서는 0번부터
1분 복습
int형 배열 arr를 다음처럼 초기화했습니다. 연산의 결과 값이 어떻게 출력될까요? 컴파일 오류가 발생하는 연산이 있다면 몇 번일까요?
1분 복습
조금 전 실습한 예제의 main() 함수에 int sum=0;을 작성하고, 8행 코드를 수정하여 배열의 모든 요소 합을 계산하는 프로그램을 만들어 보세요.
3) 전체 배열 길이와 유효한 요소 값
[문자 저장 배열 만들기]
[객체 배열 사용하기]
[나 혼자 코딩!] 객체 배열 만들어 활용하기
[배열 복사하기]
1) 객체 배열 복사하기
2) 얕은 복사
3) 깊은 복사
[향상된 for문과 배열]
1분 복습
2. 다차원 배열
[다차원 배열이란?]
[이차원 배열]
[나 혼자 코딩!] 이차원 배열 연습하기
3. ArrayList 클래스 사용하기
[기존 배열의 단점과 ArrayList]
[ArrayList 클래스의 주요 메서드]
[ArrayList 클래스 활용하기]
[나 혼자 코딩!] ArrayList 활용하기
3. 배열 응용 프로그램
[Student 클래스 구현하기]
[Subject 클래스 구현하기]
[테스트 클래스 구현 후 결과 확인하기]
연습문제
Q1.
08 상속과 다형성
1. 상속이란?
[클래스의 상속]
1) 클래스 상속 문법
[상속을 사용하여 고객 관리 프로그램 구현하기]
1) 새로운 고객 등급이 필요한 경우
2) 상위 클래스 변수를 사용하기 위한 protected 예약어
3) 테스트 프로그램 실행하기
2. 상속에서 클래스 생성과 형 변환
[하위 클래스가 생성되는 과정]
[부모를 부르는 예약어, super]
1) 상위 클래스 생성자 호출하기
2) super 예약어로 매개변수가 있는 생성자 호출하기
1분 복습
3) 상위 클래스의 멤버 변수나 메서드를 참조하는 super
[상위 클래스로 묵시적 클래스 형 변환]
1) 형 변환된 vc가 가리키는 것
3. 메서드 오버라이딩
[상위 클래스 메서드 재정의하기]
1) VIP 고객 클래스의 제품 가격 계산 메서드 재정의하기
[묵시적 클래스 형 변환과 메서드 재정의]
[가상 메서드]
1) 가상 메서드의 원리
4. 다형성
[다형성이란?]
[다형성의 장점]
1) 다형성을 활용해 VIP 고객 클래스 완성하기
5. 다형성 활용하기
[일반 고객과 VIP 고객의 중간 등급 만들기]
1) 배열로 고객 5명 구현하기
[상속은 언제 사용할까?]
1) 상속을 항상 사용하는 것이 좋을까?
6. 다운 캐스팅과 instanceof
[하위 클래스로 형 변환, 다운 캐스팅]
[instanceof]
연습문제
Q1.
09 추상 클래스
1. 추상 클래스
2. 템플릿 메서드
3. 템플릿 메서드 응용하기
4. final 예약어
10 인터페이스
1. 인터페이스란?
2. 인터페이스와 다형성
3. 인터페이스 요소 살펴보기
4. 인터페이스 활용하기
스터디 노트 업로드
1. 스터디 노트 쓸 때 글 상단에 책 DB 꼭 넣기
2. 공부한 페이지 쪽수 + 제목 잘 짓기
[Do it! 공부단] 스터디노트-1. 첫째 마당 자바 기본 익히기( ~ p.)
3. 책상 사진(모니터 나오게) 첨부
4. 실습 완료 자료 첨부 파일로 올리기
5. 최소 200자 이상 글 쓰기
다시 보기
Exam06_lotto 로또 번호 추첨기 만들기(중복된 값X, 1~45사이의 숫자 6개 발생시킬 것)
'프로그래밍 > 자바(JAVA)' 카테고리의 다른 글
[자바를 다루는 기술 Vol.1] Session2 변수와 데이터형 (0) | 2021.04.26 |
---|---|
[자바 미니 프로젝트] 참고 사이트 (0) | 2021.02.05 |
[복습] 3일차 복습 - 자바 기본(21일차 배열, 난수) (0) | 2021.01.15 |
[복습] 2일차 복습 - 자바 기본(for, while, do ~ while, 이중 for문) (0) | 2021.01.15 |
[1일차] 복습 & 자바 기본 익히기(p.18~) (0) | 2021.01.13 |