자바, 객체지향!

자바, 객체지향!

자바 프로그래밍의 꽃, 조립식 프로그래밍!

연습문제 D - 객체지향 프로그래밍

# 연습문제 D - 객체지향 프로그래밍 ## 09 클래스와 객체 --- ### 이론 요약 ![클라우드스터딩-자바-클래스와-객체-요약](https://i.imgur.com/zi6B90d.png) #### 객체 지향 프로그래밍 - OOP라고 한다. 프로그램을 객체의 조립으로 만드는 방식이다. - OOP는 프로그램의 관리/재사용/확장에 좋다. #### 클래스 vs 객체 - 클래스는 객체를 만들기 위한 설계도이다. - 객체의 또 다른 표현으로는 인스턴스(instance)가 있다. - 때문에 클래스로 객체를 만드는 것을 "인스턴스화"라고 한다. #### 클래스 설계 및 구현 - 클래스는 필드(상태)와 메소드(동작)로 구성된다. - 클래스를 도식화한 것을 "클래스 다이어그램"이라 한다. - 클래스 다이어그램 보고 코드를 작성할 줄 알아야 한다. ### 실습 리뷰 정사각형 객체의 넓이를 구하는 예. ``` public class SquareTest { public static void main(String[] args) { /* 1. 객체 생성 */ Square s = new Square(); /* 2. 필드 초기화(값 변경) */ s.length = 4; /* 3. 결과 출력 */ System.out.printf("한 변의 길이가 %d인 정사각형의 넓이: %d", s.length, s.area()); } } /* 4. 정사각형 클래스 구현 */ class Square { int length; // 길이 // 넓이 반환 int area() { return length * length; } } ``` ## 10 생성자 --- ### 이론 요약 ![클라우드스터딩-자바-생성자-요약](https://i.imgur.com/pMmmkPn.png) #### 생성자 - 생성자는 객체를 만드는 특별한 메소드다. - 생성자는 역할은, 객체 생성과 필드 초기화이다. #### 생성자 특징 - 생성자는, 호출과 정의로 나뉜다. - 생성자명은, 클래스명과 같아야 한다. - 리턴 타입은 표기하지 않는다. (void 아님) ### 실습 리뷰 마린과 메딕 객체의 상호 작용 ``` public class Starcraft { public static void main(String[] args) { // 객체 생성 Marine marine = new Marine("마린", 80); Medic medic = new Medic("메딕", 60); // 마린 스팀팩 버프~ marine.stimpack(); // 메딕의 치료 -> 마린 medic.heal(marine); } } // 마린 클래스 class Marine { // 필드 String name; int hp; // 생성자 public Marine(String name, int hp) { this.name = name; this.hp = hp; } // 메소드 public void stimpack() { System.out.printf("[%s]의 스팀팩! HP: %d -> ", name, hp); hp -= 10; System.out.printf("%d\n",hp); } } // 메딕 클래스 class Medic { // 필드 String name; int hp; // 생성자 public Medic(String name, int hp) { this.name = name; this.hp = hp; } // 메소드 public void heal(Marine target) { System.out.printf("[%s]의 치유! %s HP(%d -> ", name, target.name, target.hp); target.hp += 10; System.out.printf("%d)\n", target.hp); } } ``` ## 11 레퍼런스 변수와 static --- ### 이론 요약 ![클라우드스터딩-자바-레퍼런스와-static-요약](https://i.imgur.com/8SjXUXO.png) #### 레퍼런스 변수 - 레퍼런스 변수란, 객체를 가리키는 변수다. - 기본형 변수는 값을 직접 저장하나, 레퍼런스 변수는 객체의 위치를 가리킨다. #### static 키워드 - static 키워드는 필드와 메소드에 적용될 수 있다. #### 클래스 변수 - 클래스 변수란, 클래스 영역에 존재한다. - 인스턴스 변수란, 객체 내부에 존재한다. #### 인스턴스 변수 - 클래스 메소드란, 주체 객체가 없이 수행되는 메소드다. - 인스턴스 메소드란, 주체 객체가 실행하는 메소드다. ### 실습 리뷰 두 점 사이의 거리 ``` public class PointTest { public static void main(String[] args) { // 객체 생성 Point p1 = new Point(0, 0); Point p2 = new Point(3, 4); // 거리 계산 double dist = Point.distance(p1, p2); // 결과 출력 System.out.printf("두 점 A%s, B%s 사이의 거리: %.2f", p1.toStr(), p2.toStr(), dist); } } class Point { int x; int y; Point (int _x, int _y) { x = _x; y = _y; } String toStr() { return String.format("(%d, %d)", x, y); } static double distance(Point p, Point q) { double dX = p.x - q.x; // x좌표의 변화량 double dY = p.y - q.y; // y좌표의 변화량 return Math.sqrt((dX * dX) + (dY * dY)); } } ``` ## 확인하기 --- <div class="interact_responsive_padding" style="padding:100% 0 0 0;position:relative;margin-bottom:5px;"><div class="interact_responsive_wrapper" style="height:100%;left:0;position:absolute;top:0;width:100%;"><iframe id="interactApp5cecec051077800014b551cd" width="100%" height="100%" style="border:none;max-width:100%;margin:0;" allowTransparency="true" frameborder="0" src="https://quiz.tryinteract.com/#/5cecec051077800014b551cd/q/1?method=iframe"></iframe></div></div> ## 도서구매 <a href="http://www.yes24.com/Product/Goods/104740689"><img src="http://image.yes24.com/goods/104740689/XL" width="50%" /></a>

Challenge

개념 실습! 학습 내용을 진짜 내 것으로 만들기!