1. 클래스의 구조 (아무리 복잡한 코드라도, 이 구조를 벗어나지 않는다!, 이 구조는 무조건 기억해라!)
(1) 패키지 선언 (무조건 한 개만 선언 가능!)
(2) 임포트 구문
(3) 클래스 선언 {
(4) 멤버변수
(5) 생성자
(6) 메소드
}
cf) 패키지 컴파일/실행
#>javac -d . XX.java
#>java aa.bb.XX
2. 주석(Comment)
(1) 인라인 주석, 1라인만 주석
//
(2) 여러라인
/*
*/
(3) 문서화 주석, API를 만들때 사용
/**
*/
3. 실행 순서
class C {
C() { // 정의하는 것
System.out.println("C()-1");
m1(); // 메소드 호출
System.out.println("C()-2");
}
void m1() { // void는 반환타입, 리턴타입임, 이건 메소드 정의
System.out.println("m1()-1");
m2();
System.out.println("m1()-2");
}
void m2() {
System.out.println("m2()-1");
}
public static void main(String[] args)
{
System.out.println("main()-1");
C c = new C(); // 호출하는 것, new를 붙이는 건 생성자를 호출 할 때 사용하는 문법임
// 타입 변수 = new C(); 라고 하는 이유는 주어를 만들어서 다른 메소드도 실행시켜 주려고 주어를 부여하는 것임
System.out.println("main()-2");
c.m2(); // 이것처럼!
System.out.println("main()-3");
}
}
4. 객체 지향 용어
(1) 클래스(Class): 객체를 만드는 틀
ex) 붕어빵틀
(2) 객체(Object): 클래스를 통해 생성된 구현물 or 모든 것
ex) 붕어빵
(3) 생성자(Constructor): 클래스명과 똑같고 소괄호로 호출하는 특징이 있음, 객체가 생성될 때 하는 일(기능)
ex) 붕어빵틀()
(4) 메쏘드(Method): 객체가 할 수 있는 일(기능)
ex) 배부르게한다()
(5) 속성(Attribute == 멤버변수) : 객체의 특성
(존재 이유: 다양한 객체를 만들기 위해서)
ex) String 앙꼬; (슈크림 붕어빵, 아이스크림 붕어빵)
(추가용어!) 메모리에 올라와 있는 무엇을 인스턴스라고 함
5. 클래스 붕어빵
// 여기서, 5번 코딩을 하려면 클래스명을 다 다르게 지정해주어야 한다. 그럴려면 몇가지 조건이 필요하다.
class 붕어빵 {
String 앙꼬;
붕어빵() {
앙꼬 = "팥";
}
붕어빵(String 앙꼬) {
this.앙꼬 = 앙꼬;
}
void 배부르게하다() {
System.out.println("배부르게 한다");
}
}
class 아줌마 {
int 나이;
붕어빵 빵1, 빵2;
아줌마() {
나이 = 40;
}
void 굽는다() {
빵1 = new 붕어빵();
빵2 = new 붕어빵("설탕");
System.out.println("붕어빵을 구웠다");
}
}
class 손님 {
int 돈 = 1000;
String 이름 = "철수";
붕어빵 구매한다(붕어빵 빵) {
돈 = 돈 - 300;
return 빵;
}
}
class 신 {
public static void main(String[] args)
{
아줌마 주인 = new 아줌마();
System.out.print("나이가 " + 주인.나이 + "세인 아줌마가 ");
System.out.println("붕어빵을 구웠다");
주인.굽는다();
System.out.print("첫번째 붕어빵의 앙꼬는 " + 주인.빵1.앙꼬 + "이고, ");
System.out.print("두번째 붕어빵의 앙꼬는 " + 주인.빵2.앙꼬 + "이다.");
System.out.println();
손님 손 = new 손님();
붕어빵 빵 = 손.구매한다(주인.빵1);
System.out.println(
손.이름+"가 붕어빵(앙꼬:"+빵.앙꼬+")을 구매하고, "+손.돈+"원이 남았어요");
System.out.print("붕어빵은 "+손.이름+"를 ");
빵.배부르게하다();
}
}
클래스를 다르게 하려면 붕어빵과 똑같은 조건을 가진 다른 명칭들
이 필요함
1. 물건이 있어야 한다. ex) 붕어빵, / 애니메이션
1-1. 물건의 기능이 있어야 한다. ex) 배부르게 하다, / 재미를 준다
1-2. 물건의 속성이 있어야 한다. ex) 앙꼬, / 구동방식 / 스트리밍, 블루레이
2. 판매자가 있어야 한다. ex) 아줌마, / 배급사
2-1. 판매자의 기능이 있어야 한다. ex) 굽는다, / 컨텐츠를 만든다
2-2. 판매자의 속성이 있어야 한다. ex) 나이, / 주가
3. 구매자가 있어야 한다. ex) 손님, / 김민겸
3-1. 손님이 돈을 지불해야 한다. ex) 돈 얼마, / 돈 얼마
4. 이 모든 것을 만들어 줄 수 있는 전지적 시점의 누군가가 필요하다. ex) 신, / 한국경제
class 애니메이션 {
String 구동방식;
애니메이션() {
구동방식 = "스트리밍";
}
애니메이션(String 구동방식) {
this.구동방식 = 구동방식;
}
void 재미있게하다() {
System.out.println("재미있게 한다.");
}
}
class 배급사 {
int 주가;
애니메이션 구동방식1, 구동방식2;
배급사() {
주가 = 124;
}
void 만든다() {
구동방식1 = new 애니메이션();
구동방식2 = new 애니메이션("블루레이");
System.out.println("컨텐츠를 만들었다");
}
}
class 소비자 {
int 돈 = 30000;
String 이름 = "김민겸";
애니메이션 구매한다(애니메이션 구동방식) {
돈 = 돈 - 3000;
return 구동방식;
}
}
class 한국경제 {
public static void main(String[] args)
{
배급사 디즈니 = new 배급사();
System.out.print("주가가 " + 디즈니.주가 + "달러인 월트디즈니가 ");
디즈니.만든다();
System.out.print("첫번째 애니메이션의 구동방식은 " + 디즈니.구동방식1.구동방식 + "이고, ");
System.out.print("두번째 애니메이션의 구동방식은 " + 디즈니.구동방식2.구동방식 + "이다.");
System.out.println();
소비자 소비 = new 소비자();
애니메이션 구동방식 = 소비.구매한다(디즈니.구동방식1);
System.out.println(
소비.이름+"가 뮬란(구동방식:"+구동방식.구동방식+")을 구매하고, "+소비.돈+"원이 남았다.");
System.out.print("뮬란은 "+소비.이름+"를 ");
구동방식.재미있게하다();
}
}
class A { // class body or block = {}
public static void main(String args[]){ // 인입점(시작점)이 있는 클래스 요건, method body or block = {}
System.out.println("A의 main() 호출");
}
}
귀여운 해린이가 간다.
라는 문장에서 귀여운=속성, 해린이가=생성자, 간다=메쏘드class A {
String shape; // 속성(멤버변수)1 선언
String name; // 속성(멤버변수)2 선언
A() {
// 생성자 선언
// 이름을 안넣어주는 애는 얘가 호출됨
shape = "귀여운"; // 초기화
name = "영희"; // 초기화
}
A(String name, String shape) { // 파라미터 지역변수 (소괄호 안에 넘어오는 변수)
// 생성자 선언
// 이름을 넣어주는 애는 얘가 호출됨
this.name = name;
this.shape = shape;
}
void go() { // 메소드 선언
System.out.print("간다");
}
public static void main(String args[]) { // 파라미터 지역변수 (소괄호 안에 넘어오는 변수)
A a1 = new A(); // 생성자 호출
A a2 = new A("철수", "성격좋은"); // 생성자 호출
System.out.print(a2.shape + " " + a2.name + "(이)가 "); // 속성(멤버변수) 호출
a1.go(); // 메소드 호출
}
}