on
java 수업 DAY 10 // 객체
java 수업 DAY 10 // 객체
절차 지향 프로그래밍 패러다임 - 순서대로 흘러가게끔 하는 것
+
객체라는 개념
= 객체 지향 프로그래밍 패러다임
객체란? 우리 주변에 있는 물건 사고 생각
public class Test { public static void main(String[] args) { // 정수 int i = 10; double d = 5.5; // 학생, 이름, 국어, 수학, 영어 String name; int kor; int math; int eng; Student s; // Student는 타입으로 존재 no / Student를 class를 이용 타입으로 가능 } }
public class Student { //-> 인스턴스라고 하는 듯 // 값 -> 상태 (state) // 멤버 변수 (member variables). 필드 (fields) String name; int kor; int eng; int math; } }
public class Student { public static void main(String[] args) { Student s = new Student(); // Student라는 타입을 클래스로 표현했고 // ㄴ Student란 타입을 만들어 내고 있는 것 현실 -> 클래스 -> 컴퓨터 세상 객체 // 인스턴스화 (instance) } }
메소드와 필드 = 멤버
new Student - 객체 생성
Student s - s란 이름으로 인스턴스를 이어 놓는다
public class Test { public static void main(String[] args) { Student s = new Student(); //필드 초기화 s.name = "명수"; s.kor = 100; s.eng = 90; s.math = 100; System.out.println(s.name); System.out.println(s.kor); System.out.println(s.eng); System.out.println(s.math); // 성우 Student s2 = new Student(); s2.name = "성우"; s2.kor = 80; s2.eng = 80; s2.math = 80; System.out.println(s2.name); System.out.println(s2.kor); System.out.println(s2.eng); System.out.println(s2.math); } }
실제 있는 것을 자바 코드로 적는 데 현실 그대로 힘드니 필요한 부분만 - 추상화
// 추상화된 자동차 // 색상 모델 번호 -> 값 상태 public class Car { // 크기가 일정하지 않음 String color; String model; int number; }
// 자동차 프로그램 (주차 관리) class TestCar { public static void main(String[] args) { // 빨간색 포르쉐 4885 Car portche = new Car(); // 참조형 변수 (원시형 타입이랑 다름) //인스턴스 화 된 것을 참조해서 나온다 실제 값은 인스턴스란 친구에서 참조함 (class Car) portche.color = "Red"; portche.model = "Porche 911"; portche.number = 4885; } }
위 class에서 지정 안된 변수를 가져왔을 땐 컴파일 에러 남
(ex. efficiency를 적었을 때 class Car에 없으므로 에러가 난다.)
초기화하지 않았으면 기본 값으로 나온다
참조형 변수는 대문자
원시형 변수는 소문자
import java.util.Scanner; class ReferenceTypes { public static void main(String[] args) { String a = "asdf"; String b = "qwer"; // String도 참조형 String 객체 class로 만들어 놈 Scanner scan = new Scanner(System.in); // 참조형 타입 Scanner scan2 = new Scanner(System.in); // new = 새로 만들어짐 System.out.println(a == b); System.out.println(scan == scan2); // 각각 다른 것을 참조하고 있음 } }
변수 != 인스턴스 // 변수는 공간 원시형은 값을
인스턴스는 레퍼런스에 참조가 담겨있음 참조형 변수는 인스턴스를 찾아갈 수 있게끔 되어있음
car라는 변수와 Student 변수의 크기는 같지만 인스턴스의 크기는 다를 수 있음
class TestNull { public static void main(String[] args) { int i = 0; Car c; // 선언만하고 초기화 하지 않으면 에러가 난다. Car c = null; // null 은 지금 참조하는 것이 없다. if (c != null) { System.out.println(c.color); } System.out.println(c.color); // 컴파일 에러 ㄴㄴ 실행시 에러 // null이라서 실행 도중에 가르키는 것이 null이라서 프로그램 종료 NullPointerException } }
== 을 어떤 걸 참조
!= null이 아닐 때만
// 객체의 상태 (state) // 스마트폰 public class SmartPhone { // 기종 String model; // 색 String color; // 가로(mm) double width; // 세로(mm) double length; // 두께(mm) double height; }
컴파일 해서 class 파일까지 만들어야 한다
// 삼성 s21, 애플 iphone 13 public class TestPhones { public static void main(String[] args) { SmartPhone s21 = new SmartPhone(); s21.color = "팬텀 화이트"; s21.model = "삼성 s21"; s21.width = 71.2; s21.length = 151.7; s21.height = 7.9; double volume = s21.width * s21.length * s21.height; System.out.println(volume); SmartPhone iphone13 = new SmartPhone(); iphone13.model = "iphone 13"; iphone13.color = "화이트"; iphone13.width = 71.5; iphone13.length = 146.7; iphone13.height = 7.65; } }
public class Person { // 메소드 (method) ┌ 머리 (head) public void sayHello() { // sayHello 이름 - 객체 행동을 표현하는 메소드의 이름부분 System.out.println("안녕하세요"); // 몸통(body) - 중괄호 범위 -> 문장(객체의 행동) } }
class TestPerson { public static void main(String[] args) { Person p = new Person(); p.sayHello(); } }
public class Person { // 아래로 흘러가는것이 아니라 호출하는것 순서 상관 없음 // 파라미터 (parameter) ┐ // 파라미터의 개수, 타입, 순서가 중요 public void printSum(int a, int b) { // 중괄호 안에만 쓰는 지역변수 (쓰고 사라짐) System.out.println(a + b); } public void sayHello() { // 파라미터를 받지 않겠다 = TestPerson에 sayHello(123)적으면 오류남 System.out.println("안녕하세요"); } public void sayHungry() { System.out.println("배고파요"); System.out.println("밥 주세요"); } public void onePlusOne() { System.out.println("1 + 1 = 2"); } }
class TestPerson { public static void main(String[] args) { Person p = new Person(); p.sayHello(); p.sayHungry(); p.onePlusOne(); p.printSum(5, 10); // arguments = args p.printSum(33, 220); } }
TestPerson에 int a 가 있어도 아무런 영향을 주지 않음 Person int a와 상관없음
public class MyClass { // Call by value 새로운 int a 에 값이 복사되어서 들어감 public int plusOne(int a) { // void 출구가 없음 이 메소드는 값을 뱉어내지 못함 // return이 없음 }에서 값이 사라짐으로 // TestMethods에 값이 가지를 못함 a++; return a; // 메소드 안에서 있음 돌아감 return 옆에 값이 있음 값을 가지고 돌아감 // void가 출구가 없는거라서 void대신 가지고 돌아가는 값의 타입을 적는다 }// 여기서 소멸 }
public class TestMethods { public static void main(String[] args) { MyClass m = new MyClass(); int a = 10; a = m.plusOne(a); System.out.println(a); } }
public int plusOne에서 int = 반환 형(Type) - 여러 개를 반환하지 못함 1개만 가능
return // 반환
메소드 이름 = 변수 이름 짓는 것과 똑같음 소문자로 특수문자 안된다
단어 여러개면 두번째 대문자
from http://hiapprendre.tistory.com/22 by ccl(A) rewrite - 2021-12-09 21:28:12