1절 객체 지향 프로그래밍
1. 객체와 클래스 OX 문제
① O
② O
③ X -> 하나의 클래스로 여러 개의 객체를 생성할 수 있다. new를 여러번 해주면 된다.
④ O
2. 클래스의 구성 멤버 설명 문제
① 필드 : 객체의 데이터를 저장한다.
② 생성자 : 객체의 초기화를 담당한다.
③ 메소드 : 객체의 동작 부분으로, 실행 코드를 가지고 있는 블록이다.
3. 클래스의 구성 멤버 설명 문제
public class Member {
String name; // 필드
Member(String name) { ... } // 생성자
void setName(String name) { ... } // 메소드
}
2절 필드
1. 필드 OX 문제
① O
② O
③ X -> 참조 변수를 통해서 접근 가능
④ O -> 필드는 자동 초기화된다.
2.
public class Member {
String name;
String id;
String password;
int age;
}
3.
public class MemberExample {
public static void main(String[] args) {
Member member = new Member();
member.name = "최하얀";
member.age = 23;
}
}
3절 생성자
1. 생성자 OX문제
*① X -> 객체를 생성하려면 생성자 호출이 반드시 필요하다.
② O
③ O
④ O
2.
public class Member2 {
String name;
String id;
Member2(String name, String id) {
this.name = name;
this.id = id;
}
}
public class Member2Example {
public static void main(String[] args) {
Member2 user1 = new Member2("홍길동","hong");
System.out.println("이름 : " + user1.name + "\n아이디 : " + user1.id);
}
}
이름 : 홍길동
아이디 : hong
3. Board 클래스의 생성자 오버로딩 되어있음, this ( ) 를 활용하여 중복 코드 제거
public class Board {
String title;
String content;
String writer;
String date;
int hitcount;
Board(String title, String content) {
this(title, content, "로그인한 회원아이디", "현재 컴퓨터 날짜", 0);
}
Board(String title, String content, String writer) {
this(title, content, writer, "현재 컴퓨터 날짜", 0);
}
Board(String title, String content, String writer,String date) {
this(title, content, writer, date, 0);
}
Board(String title, String content, String writer,String date, int hitcount) {
this.title = title;
this.content = content;
this.writer = writer;
this.date = date;
this.hitcount = hitcount;
}
}
4. Board 객체를 생성하는 네 가지 방법
Board board1 = new Board("제목", "내용");
Board board1 = new Board("제목", "내용", "홍길동");
Board board1 = new Board("제목", "내용", "홍길동", 2021-08-02);
Board board1 = new Board("제목", "내용", "홍길동", "2021-08-02", 0);
4절 메소드
1. 메소드
① void
② return
③ ... or 배열
④ 오버로딩
2. 메소드 오버로딩 OX문제
① O
② X
③ O
④ O
3.
public class MemberService {
// 메소드
boolean login(String id, String password) {
// if(id == "hong" && password == "12345") { // 문자열 비교는 무조건 equals로 하기!!
if(id.equals("hong") && password.equals("12345")) {
return true;
} else {
return false;
}
}
void logout(String id) {
System.out.println("로그아웃 되었습니다.");
}
}
public class MemberServiceExample {
public static void main(String[] args) {
MemberService memberService = new MemberService();
// 로그인 오류
boolean result1 = memberService.login("hong", "54321"); // 비번 틀림
execute(result1, memberService); // id 또는 password가 올바르지 않습니다.
// 로그인 완료
boolean result2 = memberService.login("hong", "12345");
execute(result2, memberService); // 로그인 되었습니다.
}
static void execute(boolean result, MemberService memberService) {
if(result) {
System.out.println("로그인 되었습니다.");
memberService.logout("hong"); // 로그아웃 되었습니다.
}
else {
System.out.println("id 또는 password가 올바르지 않습니다.");
}
}
}
id 또는 password가 올바르지 않습니다.
로그인 되었습니다.
로그아웃 되었습니다.
** memberService 를 매개변수로 받은 이유?
우선 실행 코드의 if-else구문 코드가 중복이 되어 따로 execute라는 메소드를 생성해주었다.
그렇게 하니 if문 안의 memberService.logout("hong"); 에서 에러가 발생했다.
에러는 memberService 객체를 생성한 곳이 main 메소드 내부 였는데 이를 main문을 빠져나와 execute 메소드에서 사용하려다보니 지역변수 에러가 발생한 것이다.
따라서 이 지역변수를 execute 메소드에서도 사용하고자 객체 자체를 매개변수로 받아준것이다.
여기서 memberService 객체의 타입은 클래스 타입이므로 타입에다가 클래스명을 써준다.
4.
public class Printer {
//메소드
void println(int x) {System.out.println(x);}
void println(boolean x) {System.out.println(x);}
void println(double x) {System.out.println(x);}
void println(String x) {System.out.println(x);}
}
public class PrinterExample {
public static void main(String[] args) {
Printer printer = new Printer();
printer.println(10);
printer.println(7-3==4);
printer.println(5.7);
printer.println("홍길동");
}
}
5절 인스턴스 멤버와 정적 멤버
1. 인스턴스 멤버와 정적 멤버 OX문제
① O
② X -> 인스턴스 필드는 생성자에서 초기화할 수 있다.
③ O
④ O
2. final 필드와 상수(static final)
① O
② X -> final 필드는 생성자에서 초기화 가능하지만 상수는 생성자에서 초기화될 수 없고 필드에서만 초기화 가능하다.
③ O
④ O
3.
public class ShopService {
// 싱글톤 만드는 코드
//필드
private static ShopService shopService = new ShopService();
//생성자
private ShopService() {}
//메소드
static ShopService getInstance() {
return shopService;
}
}
public class ShopServiceExample {
public static void main(String[] args) {
ShopService obj1 = ShopService.getInstance();
ShopService obj2 = ShopService.getInstance();
if(obj1 == obj2) {
System.out.println("같은 ShopService 객체입니다.");
} else {
System.out.println("다른 ShopService 객체입니다.");
}
}
}
6절 패키지와 접근 제한자
1. 접근 제한
① O
② O
③ X -> 같은 패키지 내에 있는 클래스는 모두 가능하다.
④ O
'🤼♂️ 5. Project > 5-2 연습문제 풀이' 카테고리의 다른 글
[혼자공부하는자바] 8장 인터페이스 (0) | 2021.08.11 |
---|---|
[혼자공부하는자바] 7장 상속 (0) | 2021.08.06 |
[혼자공부하는자바] 5장 참조타입 (0) | 2021.07.30 |
[혼자공부하는자바] 4장 조건문과 반복문 (0) | 2021.07.29 |
[혼자공부하는자바] 3장 연산자 (0) | 2021.07.29 |
댓글