package javajungsuk6;

public class Ch06_1 {

	public static void main(String[] args) {
		// 6-1 객체지향언어
		
		// 객체지향언어 = 프로그래밍 언어 + 객체지향개념(규칙)
		// 절차적언어는 순서대로, 객체지향언어는 그렇지 않다.
		// 객체지향언어의 핵심 특징(oop) - 캡슐화, 상속, 추상화, 다형성 / 캡상추다
		
		// 절차적언어에 비해 객체지향언어의 장점
		System.out.println("1. 코드 재사용성 - 다른사람이 쉽게 사용할 수 있도록 하는 것");
		System.out.println("2. 유지보수 용이 - 유지보수를 해서 소프트웨어가 변경되더라도 적은 노력으로 그 변화에 대응할 수 있게 하는 것");
		System.out.println("3. 중복코드제거 - 중복코드 제거 기능이 많다.");
		
		System.out.println("핵심 특징 4가지 중 다형성이 가장 중요하고 이해해야 객체지향개념을 이해할 때 도움된다.");
		
		// 객체지향 개념은 어떻게 공부해야 하나요? >> 6장 전체와 7장 다형성을 여러번 보고 이 정도면 되겠다 싶을 때 다음 것 시작하기
		System.out.println("7장은 다형성이 나오는데 그것을 이해하지 못하면 그 다음의 것들을 공부해도 소용이 없기 때문에 꼭 여러번 보고 가자.");
		System.out.println("규칙이기 때문에 이해보다는 외워야 한다."); // 규칙이 왜 생겼는지는 따지지 않기
		System.out.println("나만의 요약정리를 하고 매일 한번씩 읽어주는 것이 도움된다."); // 요약정리는 6장과 7장에 있는 다형성
		System.out.println("8장, 9장... 이어서 공부할 때에도 반복해서 읽어주는 것이 도움된다.");
		
		// 웹에 관심이 있다면 JSP, Spring / 모바일은 안드로이드
		System.out.println("객체지향개념을 이해는 했지만 설계가 잘 되지 않는다면 이론서를 공부하지 말고 실습을 해서 실력을 키워야 한다.");
		// 이해만으로는 설계를 잘하기는 어려운 것이 당연하다. 그것을 인정하고 더 연습하기
	}

}

package javajungsuk6;

public class Ch06_2a4 {

	public static void main(String[] args) {
		// 6-2 ~ 6-4 클래스와 객체, 객체의 구성 요소 - 속성과 기능
		
		// 클래스의 정의 : 객체를 정의해 놓은 것 >> 어떤 객체가 이러이러 하다.
		// 클래스의 용도 : 객체를 생성하는 데 사용
		// 객체의 정의 : 실제로 존재하는 사물 또는 개념
		// 객체의 용도 : 객체가 가지고 있는 기능과 속성에 따라 다름
		
		System.out.println("클래스 : 붕어빵 기계 / 객체 : 붕어빵");
	}

}

package javajungsuk6;

public class Ch06_5 {

	public static void main(String[] args) {
		// 6-5 한파일 여러 클래스 작성하기
		
		// 소스파일의 이름이 Hello2.java라고 한다면 / public class Hello2 {}
		// class가 더 만들어져도 에러가 나지 않지만 하나의 소스파일에는 하나만 있는 것이 좋다.
		//  class Hello1 {} 중요 - 소스파일과 main class의 이름이 불일치해도 에러는 나지 않지만 실행을 시키면 다른 것이 실행된다.
		//  class Hello2 {}
		 
		 // 중요한 것 정리
		 System.out.println("하나의 소스파일에는 하나의 class만 작성하는 것이 바람직하다.");
		 System.out.println("소스파일의 이름은 public class의 이름과 일치해야 한다.");
		 System.out.println("하나의 소스파일에는 하나의 public class만 허용한다. / class는 더 만들 수 있다.");
		 System.out.println("main 클래스의 이름이 소스파일의 이름과 일치해야 한다. 직접 실행하려는 class를 지정하는 방법이 있다.");
		
	}

}