본문 바로가기
🤼‍♂️ 5. Project/5-2 연습문제 풀이

[혼자공부하는자바] 6장 클래스

by 달님🌙 2021. 8. 2.
반응형

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

 

 

반응형

댓글