자바 프로그래밍 입문 강좌 (renew ver.) - 초보부터 개발자 취업까지!!
11. 객체 지향 프로그래밍이란
11-1. 객체란?
세상에 존재하는 모든 것을 뜻하며 프로그래밍에서 속성과 기능을 가지는 프로그램 단위이다.
11-2. 클래스란?
객체를 생성하기 위한 툴로 모든 객체는 클래스로부터 생성된다.
11-3 클래스 구성 요소
속성(멤버 변수)와 기능(메서드)로 구성된다.
12. 클래스 제작과 객체 생성
12-1. 클래스 제작
package pjtTest;
public class Grandeur {
//일반적으로 클래스 이름 첫 글자는 대문자
public String color;
public String gear;
public int price; //멤버 변수( 속성)
public Grandeur() {
System.out.println("Grandeur constructor");
}//생성자
public void run() {
System.out.println("run -- ");
}
public void stop() {
System.out.println("stop -- ");
}
}
package pjtTest;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Grandeur myCar1 = new Grandeur();
myCar1.color = "red";
myCar1.gear = "auto";
myCar1.price = 30000000;
myCar1.run();
myCar1.stop();
Grandeur myCar2 = new Grandeur();
myCar2.color = "blue";
myCar2.gear = "auto";
myCar2.price = 20000000;
myCar2.run();
myCar2.stop();
}
}


12-3. 생성자
클래스에서 객체를 생성할 때 가장 먼저 호출된다.
13. 메서드
13-1. 메서드 선언과 호출
메서드도 변수와 같이 선언 및 정의 후 필요 시에 호출해서 사용한다.
package pjtTest;
public class ChildClass {
public String name;
public String gender;
public int age;
public ChildClass() {
System.out.println("Child constructor");
}
public void getInfo() {
System.out.println("--get info--");
System.out.println("name : " + name);
System.out.println("age : " + age);
}
}
package pjtTest;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
ChildClass child1 = new ChildClass();
child1.getInfo();
}
}

package pjtTest;
public class ChildClass {
public String name;
public String gender;
public int age;
public ChildClass() {
System.out.println("Child constructor");
}
public void getInfo() {
System.out.println("--get info--");
System.out.println("name : " + name);
System.out.println("age : " + age);
System.out.println("gender : " + gender);
}
public void setInfo(String n, String g, int a ) {
System.out.println("--set info--");
name = n;
gender= g;
age =a ;
}
}
package pjtTest;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
ChildClass child1 = new ChildClass();
child1.setInfo("hong gil dong", "m", 12);
child1.getInfo();
}
}

13-3. 중복 함수
public void getInfo(int x, int y)
{
Systemout.println("f1");
}
public void getInfo(String s1, String s2)
{
System.out.println("f2");
}
같고 매개변수 개수 또는 타입이 다른 메서드를 만들 수 있다.
오버로딩이라고 한다.
13-4. 접근자
메서드를 호출할 때 접근자에 따라 호출이 불가할 수 있다.
public은 접근 가능, private는 불가능.
14. 객체와 메모리
14-1. 메모리에서 객체 생성(동적 생성)
- 객체는 메모리에서 동적으로 생성되며, 객체가 더 이상 필요없게 되면 GC에 의해 제거된다.
14-2. 레퍼런스
생성한 객체의 주소를 변수에 저장하는 것을 레퍼런스라고 한다.
package pjtTest;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
ObjectClass obj1 = new ObjectClass();
ObjectClass obj2 = new ObjectClass();
ObjectClass obj3 = new ObjectClass();
System.out.println(obj1);
System.out.println(obj2);
System.out.println(obj3);
}
}

14-4. null과 NullPointException
레퍼런스에 null이 저장되면 객체의 연결이 끊기며 더 이상 객체를 이용할 수 없다.
obj1= null;
처럼 null이 담긴 객체를 호출하면 NullPointException이 발생한다.
15. 생성자와 소멸자, 그리고 this 키워드
15-1. 객체가 생성될 때 가장 먼저 호출되는 생성자로 만약 개발자가 명시하지 않아도 컴파일 시점에 자동 생성된다.
package pjtTest;
public class ObjectClass {
public ObjectClass() {
System.out.println("Object Class()");
}
}
package pjtTest;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
ObjectClass obj1 = new ObjectClass();
}
}

생성자가 없어도 컴파일이 알아서 디폴트 생성자를 만든다.
15-2. 사용자 정의 생성자
매개변수를 넣을 수 있다.
package pjtTest;
public class ObjectClass {
public ObjectClass() {
System.out.println("Object Class()");
}
public ObjectClass(String s, int[] iArr) {
System.out.println("User-defined constructor");
}
}
package pjtTest;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int[] iArr = {10, 20, 30};
ObjectClass obj1 = new ObjectClass("Hello", iArr);
}
}

15-3. 객체가 GC에 의해 메모리에서 제거될 때 finalize 메서드가 호출된다.
System.gc()를 사용한다고 해서 GC가 바로 작동하는 것은 아니라 가급적 빨리 작동하도록 요청하는 것
package pjtTest;
public class ObjectClass {
public ObjectClass() {
System.out.println("Object Class()");
}
public ObjectClass(String s) {
System.out.println("User-defined constructor");
}
@Override
protected void finalize() throws Throwable {
System.out.println("-- finalize() --");
super.finalize();
}
}

15-4. 현재 객체를 가리킬 때 this를 사용
public ObjectEx(int i, String s, int is[]) {
this.num = i;
this.str = s;
this.nums = is;
}
16. 패키지와 static
16-1. 패키지
java 프로그램은 많은 클래스로 구성되고 이러한 클래스를 폴더 형식으로 관리하는 것을 패키지라고 한다.

16-2. import문
다른 패키지에 있는 클래스를 사용하기 위해선 import 키워드 사용.
16-3. static
클래스의 속성과 메서드에 static을 사용하면 어디서나 속성과 메서드를 공유할 수 있다.
package pjtTest;
public class EmployeeBank {
String name;
static int amount = 0;
public EmployeeBank(String name) {
this.name = name;
}
public void saveMoney(int money) {
amount+=money;
System.out.println("amount : " + amount);
}
public void spendMoney(int money) {
amount -= money;
System.out.println("amount : " + amount);
}
public void getBankInfo() {
System.out.println("Name : " + this.name);
System.out.println("amount : " + amount);
}
}
package pjtTest;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
EmployeeBank parkBank = new EmployeeBank("박찬호");
parkBank.saveMoney(100);
EmployeeBank leeBank = new EmployeeBank("이승엽");
leeBank.spendMoney(30);
parkBank.getBankInfo();
leeBank.getBankInfo();
}
}

17. 데이터 은닉
17-1. 멤버 변수의 private 설정
멤버 변수 = 속성은 주로 private로 설정해서 외부에서 데이터가 쉽게 변질되는 것을 막는다.
17-2. setter, getter
멤버 변수를 외부에서 변경할 수 있도록 한다.
package pjtTest;
public class Student {
private String name;
private int score;
public Student(String n, int s) {
this.name = n;
this.score = s;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public void getInfo() {
System.out.println("--getinfo()--");
System.out.println("name : " + name);
System.out.println("score : " + 90);
}
}
package pjtTest;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Student std = new Student("홍길동", 90);
std.getInfo();
std.setScore(10);
std.getInfo();
}
}

'개발 공부 > Java' 카테고리의 다른 글
자바 프로그래밍 입문 강좌 26~28. JAVA 마무리 (0) | 2020.07.05 |
---|---|
자바 프로그래밍 입문 강좌 18~25. JAVA 상속 및 클래스 (0) | 2020.07.05 |
자바 프로그래밍 입문 강좌 2~10 JAVA 기초 문법 (0) | 2020.07.05 |
(new) 자바 프로그래밍 입문 강좌 1. 오리엔테이션 (0) | 2020.07.05 |