1. 생성자란 무엇인가?
: 메인 클래스에서 다른 클래스를 호출(Call by reference) 하고자 할 때, new 키워드를 통해 객체를 생성하여 메모리 공간을 할당하는 기능을 가진 것
public class Main {
public static void main(String[] args) {
RefClass ref = new RefClass(); // new 키워드로 해당 클래스를 호출하여 객체를 생성한다.
}
}
2. 디폴트 생성자란 무엇인가?
: 메인 클래스에서 new 키워드를 통해 사용자가 해당 초기값(파라미터)를 별도로 명시하지 않으면 자동으로 제공하는 생성자로
public class Main {
public static void main(String[] args) {
RefClass ref = new RefClass();
}
}
public class RefClass {
...
}
위 코드와 같이 new RefClass();에서 별도의 파라미터를 명시하지 않을 때에 디폴트 생성자가 정의된 것을 알 수 있다.
3. 생성자의 용도에 대하여 설명하시오.
: 객체 지향 프로그래밍(Object Oriented Programming)에서는 명령어의 목록들을 보는게 아닌 객체(Object)라는 한 단위를 통해 데이터가 흐르는 것이 특징이다. 그런 객체를 생성하기 위해서는 기존에 구현했던 클래스를 메인 클래스로 참조(Reference)해야 하는데 생성자(Constructor)가 이 기능을 수행한다.
4. null 에 대하여 설명하시오.
: 객체 지향 프로그래밍에서 Call by reference(참조에 의한 호출)를 하는 과정에 해당 객체의 공간이 없음을 의미한다.
다음 사진을 예로 들어 설명하자면,
해당 그림에서 0은 휴지 걸이에 휴지는 없지만 휴지 곽만 있는 형태이고, null은 휴지 걸이에 휴지곽도 없음을 비유하였다.
즉, 0은 휴지라는 객체에서 값이 없음(휴지가 없음)을 의미하고, null은 휴지라는 객체의 공간이 없음을 의미한다는 것을 알 수 있다.
5. 금일 프로그래밍 했던 문제
5-1.
자바 클래스를 작성하는 연습을 해보자. 다음 main() 메소드를 실행하였을 때 예시와 같이 출력되도록 TV 클래스를 작성하라.
public static void main(String[] args) {
TV myTV = new TV(“LG”, 2017, 32); //LG에서 만든 2017년 32인치
myTV.show(); // LG에서 만든 2017년형 32인치 TV
}
5-1-1. 메인 클래스
public class TVMain {
public static void main(String[] args) {
TV myTV = new TV("LG", 2017, 32); myTV.show();
}
}
5-1-2. TV 클래스
public class TV {
String brand;
int year;
int size;
public TV(String brand, int year, int size) {
this.brand = brand;
this.year = year;
this.size = size;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public void show() {
System.out.println(brand + "에서 만든 " + year + "년형 " + size + "인치 TV");
}
}
5-2.
int math, science, english;
math = 90;
science = 100;
english = 80;
Grade me = new Grade(math, science, english);
System.out.println("평균은 " + me.average());
5-2-1. 메인 클래스
import java.util.Scanner;
public class GradeMain {
public static void main(String[] args) {
int math, science, english;
math = 90;
science = 100;
english = 80;
Grade me = new Grade(math, science, english);
System.out.println("평균은 " + me.average());
}
}
5-2-2. 성적 클래스
public class Grade {
int math, science, english;
public Grade(int math, int science, int english) {
this.math = math; this.science = science;
this.english = english;
}
public int getMath() {
return math;
}
public void setMath(int math) {
this.math = math;
}
public int getScience() {
return science;
}
public void setScience(int science) {
this.science = science;
}
public int getEnglish() {
return english;
}
public void setEnglish(int english) {
this.english = engenglish
}
private double average() {
return (double)(kor + eng + mat) / 3.0;
}
}
5-3.
노래 한 곡을 나타내는 Song 클래스를 작성하라. Song은 다음 필드로 구성된다.
- 노래의 제목을 나타내는 title
- 가수를 나타내는 artist
- 노래가 발표된 연도를 나타내는 year
- 국적을 나타내는 country
또한 Song 클래스에 다음 생성자와 메소드를 작성하라.
- 생성자 2개: 기본 생성자와 매개변수로 모든 필드를 초기화하는 생성자
- 노래 정보를 출력하는 show() 메소드
- main() 메소드에서는 1978년, 스웨덴 국적의 ABBA가 부른 “Dancing Queen”을 song 객체로 생성하고 show()를 이용하여 노래의 정보를 다음과 같이 출력하라.
5-3-1. 메인 클래스
public class SongMain {
public static void main(String[] args) {
Song songOne = new Song(1978, "스웨덴", "ABBA", "Dancing Queen");
songOne.show();
Song songTwo = new Song(2020, "캐나다", "The Weeknd", "Blinding Lights");
songTwo.show();
}
}
5-3-2. 노래 클래스
public class Song {
int year;
String country, artist, title;
public Song(int year, String country, String artist, String title) {
this.year = year;
this.country = country;
this.artist = artist;
this.title = title;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getArtist() {
return artist;
}
public void setArtist(String artist) {
this.artist = artist;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public void show() {
System.out.println(year + "년 " + country + "국적의 " + artist + "가 부른 " + title);
}
}
5-4.
아래와 같이 성적을 연속적으로 입력 받고 평균을 내는 프로그램을 작성하시오.
> 국어 영어 수학을 입력하세요!
> 100 60 70
> 평균은 76.66666666666667
> 계속 하시겠습니까 y
> 국어 영어 수학을 입력하세요!
> 90 80 70
> 평균은 80.0
> 계속 하시겠습니까 n
> 프로그램을 종료합니다.
5-4-1. 메인 클래스
import java.util.Scanner;
public class GradeMain {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("국어 영어 수학을 입력하세요!");
System.out.println();
System.out.print("국어: ");
int kor = scanner.nextInt();
System.out.print("영어: ");
int eng = scanner.nextInt();
System.out.print("수학: ");
int mat = scanner.nextInt();
System.out.println();
Grade grade = new Grade(kor, eng, mat);
System.out.println("평균은 " + grade.getAvg() + " 입니다.");
System.out.println("계속하시겠습니까? [Y / N]");
char con = scanner.next().charAt(0);
if ((con == 'Y') || (con == 'y')) {
System.out.println();
System.out.println("프로그램을 다시 시작합니다.");
System.out.println(); continue;
} else if ((con == 'N') || (con == 'n')) {
System.out.println(); System.out.println("프로그램을 종료합니다.");
break;
} else {
System.out.println();
System.out.println("올바르지 않은 입력값입니다. 다시 시작합니다.");
System.out.println();
continue;
}
}
scanner.close();
}
}
5-4-2. 등급 클래스
public class Grade {
int kor, eng, mat;
public Grade(int kor, int eng, int mat) {
this.kor = kor;
this.eng = eng; this.mat = mat;
}
public int getKor() {
return kor;
}
public void setKor(int kor) {
this.kor = kor;
}
public int getEng() {
return eng;
}
public void setEng(int eng) {
this.eng = eng;
}
public int getMat() {
return mat;
}
public void setMat(int mat) {
this.mat = mat;
}
private double getAvg() {
return (double)(kor + eng + mat) / 3.0;
}
}
6. 아래의 프로그램을 작성하시오.
- 화폐 매수 구하기
반드시 클래스로 작성할것 출력 ——————————— 136000 오만원 : 2장 만원 : 3장 오천원 : 1장 천원 : 1장 오백원 : 0개 백원 : 0개 계속 하시겠습니까 y 1456000 오만원 : 29장 만원 : 0장 오천원 : 1장 천원 : 1장 오백원 : 0개 백원 : 0개 계속 하시겠습니까
6-1. 메인 클래스
import java.util.Scanner;
public class ChargeMain {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("환전을 하기 위해 돈을 넣어주세요.");
int money = scanner.nextInt();
System.out.println();
Charge charge = new Charge(money);
charge.getResult();
System.out.println();
System.out.println("다시 시작하시겠습니까? [Y / N]");
char con = scanner.next().charAt(0);
if ((con == 'Y') || (con == 'y')) {
System.out.println();
System.out.println("프로그램을 다시 시작합니다.");
System.out.println();
continue;
} else if ((con == 'N') || (con == 'n')) {
System.out.println();
System.out.println("프로그램을 종료합니다.");
break;
} else {
System.out.println();
System.out.println("올바르지 않은 입력 값 입니다. 처음부터 다시 시작합니다.");
System.out.println(); continue;
}
}
scanner.close();
}
}
6-2. 환전 클래스
public class Charge {
int money;
public Charge(int money) {
this.money = money;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
public void getResult() {
int oman = 0;
int man = 0;
int ochun = 0;
int chun = 0;
int obck = 0;
int bck = 0;
int etc = 0;
oman = money / 50000;
man = money % 50000 / 10000;
ochun = money % 50000 % 10000 / 5000;
chun = money % 50000 % 10000 % 5000 / 1000;
obck = money % 50000 % 10000 % 5000 % 1000 / 500;
bck = money % 50000 % 10000 % 5000 % 1000 % 500 / 100;
etc = money % 50000 % 10000 % 5000 % 1000 % 500 % 100;
System.out.println(); System.out.println("환전결과는 다음과 같습니다.");
System.out.println("-------------------");
System.out.println("오만원 : " + oman + "장");
System.out.println("만 원 : " + man + "장");
System.out.println("오천원 : " + ochun + "장");
System.out.println("천 원 : " + chun + "장");
System.out.println("오백원 : " + obck + "원");
System.out.println("백 원 : " + bck + "원");
System.out.println("잔 돈 : " + etc + "원");
}
}
7. 자바의 명명 규칙에 대하여 설명하시오.
7-1. 클래스
// 클래스명은 항상 첫 글자를 대문자로 한다.
// 또한 첫 글자는 숫자로 기입해선 아니한다.
public class Main {
}
7-2. 메소드와 변수
public class Main {
// 메소드와 변수의 이름은 첫 글자를 숫자로 기입해선 아니한다.
public static void main(String[] args) { // 메소드명은 항상 첫 글자를 소문자로 한다.
int var = 0; // 변수명은 항상 첫 글자를 소문자로 한다.
}
}
7-3. 상수
public class Main {
// 상수명은 모두 대문자로 사용하며, 단어 사이는 밑줄로 연결한다.
// 또한 상수명은 첫 글자를 숫자로 기입해선 아니한다.
private static final int CONST_VALUE = 200;
}
7-4. carmel case
public class Main {
int var;
// 클래스, 메소드, 변수 명등을 기입할 때 띄어쓰기를 표현하는 경우 각 다음 단어의 첫 글자를 대문자로 표기한다.
public int getMethod() {
return var;
}
public void setMethod(int var) {
this.var = var;
}
}
7-5. snake case
: 최근 java 문법에서는 쓰이지 않는 기법으로 python의 경우 snake case를 사용하고 있다.
class Main:
var_value = 0 # 변수명에서 띄어쓰기를 표현할 때 언더바('_')를 표기한다.
def __init__(self, var_value): # __init__과 같은 초기화 메소드에서 snake case를 사용한다.
self.var_value = var_value
'WebDev > 본과정' 카테고리의 다른 글
캡슐화와 static 키워드 (0) | 2021.05.11 |
---|---|
패키지와 접근제한자 (0) | 2021.05.11 |
메소드 심화 및 클래스 기초 (0) | 2021.04.30 |
반복문 심화 및 메소드 기초 (0) | 2021.04.30 |
조건문과 반복문 (0) | 2021.04.30 |
최근댓글