먼저 글에 들어가기 전에 남궁성선생님의 자바의 정석 유튜브 강의 들으시면 객체지향을 이해하는데 정말 많은 도움이 됩니다.
https://www.youtube.com/user/MasterNKS
네이버 사전에 검색하면
"모든 데이터를 하나의 물체처럼 취급해서 프로그래밍 하는 방법."
이라고 한다.
정말 간단하고도 어렵다.
붕어빵, Tv, 물건(의인화) 로 객체지향을 공부하는데 음.... 객체지향의 정의는 잘 정리 되어있는 곳이 많아서 여기에는 오늘 수업에서 공부한 내용을 정리해야겠다.
객체 지향 프로그래밍 키워드 5가지
캡 추 다 정 상
정보처리기사(필기)시험 칠때 외웠던 것들이다.
캡슐화 추상화 다형성 정보은닉 상속
상속이란?
- 기존의 클래스를 재사용해서 새로운 클래스를 작성하는 것.
- 두 클래스를 조상과 자손으로 관계를 맺어주는 것.
- 자손은 조상의 모든 멤버를 상속받는다(생성자, 초기화블럭 제외)
- 자손의 멤버개수는 조상보다 적을 수 없다(같거나 많다.)
오버라이딩 이란?
"조상클래스로부터 상속받은 메서드의 내용을 상속받는 클래스에 맞게 변경하는 것을 오버라이딩이라고 한다."
* override -'~위에 덮어쓰다(overwrite).' . '~에 우선하다.'
오버로딩 이란?
기존에 없는 새로운 메서드를 정의하는 것
다향성이란?
- "여러 가지 형태를 가질 수 있는 능력"
- "하나의 참조변수로 여러 탑입의 객체를 참조할 수 있는 것"
즉, 조상타입의 참조변수로 자손타입의 객체를 다룰 수 있는 것이 다형성
추상클래스(abstract class) 란?
- 클래스가 설계도라면 추상클래스는 '미완성 설계도'
- 추상메서드(미완성 메서드)를 포함하고 있는 클래스
- 일반 메서드가 추상메서드를 호출할 수 있다.(호출할 때 필요한 건 선언부)
- 완성된 설계도가 아니므로 인스턴스를 생성할 수 없다.
-다른 클래스를 작성하는 데 도움을 줄 목적으로 작성된다.
추상메서드(abstract method)란?
- 선언부만 있고 구현부가 없는 메서드
- 꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우에 사용
- 추상클래스를 상속받는 자손클래스에서 추상메서드의 구현부를 완성해야 한다.
인터페이스란?
- 일종의 추상클래스, 추상클래스(미완성 설계도)보다 추상화 정도가 높다.
- 실제 구현된 것이 전혀 없는 기본 설계도
- 추상메서드와 상수만을 멤버로 가질 수 있다.
- 인스턴스를 생성할 수 없고, 클래스 작성에 도움을 줄 목적으로 사용된다.
- 미리 정해진 규칙에 맞게 구현하도록 표준을 제시하는 데 사용된다.
위의 내용들을 모두 종합적으로 사용한 연습 코드.
public class GoodApp {
public static int i = 0;
public static void test() {
}
public static void main(String[] args) {
// Goods 클래스를 정의하고 GoodsApp 에서 Goods 클래스를 테스트 하세요.
//1) Goods 객체를 하나 생성하고 이 객체에 대한 레퍼런스 변수를 camera 로 합니다.
//2) 이 객체의 데이터인 각 각의 인스턴스 변수는 다음과 같은 값을 가지도록 합니다.
//상품이름 : “nikon”, 가격: 400,000, 재고개수: 30, 팔린 개수: 50
//3) 값을 세팅 한 후, 객체의 값을 출력해 보세요.
Goods camera = new Goods();
camera.setCountSold(50);
camera.setCountStock(30);
camera.setName("Nikon");
camera.setPrice(400000);
System.out.println(camera);
//제품 정보
camera.showInfo();
//Goods 클래스에 파라미터로 할인율을 입력 받고 반환 값으로 할인 가격을 반환하는 메소드를 구현하고 테스트 합니다.
System.out.println(camera.calculateDiscountPrice(50)+"만원");
}
}
public class Goods {
//정보은닉을 위해 보통 클래스의 필드들은 private으로 지정합니다. Goods클래스의 필드들을 private으로 지정하고 생성된
//객체의 인스탄스 변수의 값을 세팅하기 위한 setter getter 메소드들을 작성하고 테스트 합니다.
private int price;
private int countSold;
private int countStock;
private String name;
//Goods 에 클래스 변수 countOfGoods를 추가 하고 공유변수로 사용하는 실습을 합니다.
//생성자에서 증가 시키고 새 객체를 생성할 때 마다 값 변화를 확인합니다.
//인스턴스 변수였을 때와 차이를 생각해 보고 이해하도록 합니다.
public static int countofGoods = 0;
public Goods(int price, int countSold, int countStock, String name) {
this();
this.price = price;
this.countSold = countSold;
this.countStock = countStock;
this.name = name;
}
public Goods() {
countofGoods = countofGoods + 10;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public int getCountSold() {
return countSold;
}
public void setCountSold(int countSold) {
this.countSold = countSold;
}
public int getCountStock() {
return countStock;
}
public void setCountStock(int countStock) {
this.countStock = countStock;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//Goods의 정보를 화면에 출력하는 public void showInfo() 메서드를 작성하고 테스트 합니다.
public void showInfo() {
System.out.println(
"상품이름 : " + name +
", 가격 : " + price +
", 재고개수 : " + countStock +
", 팔린 갯수 : " + countSold
);
}
//Goods 클래스에 파라미터로 할인율을 입력 받고 반환 값으로 할인 가격을 반환하는 메소드를 구현하고 테스트 합니다.
public int calculateDiscountPrice(double percentage) {
return (int)(price * percentage/100);
}
}
'Dev > Java' 카테고리의 다른 글
JDBC 처음부터 끝까지 사용해 보기(proj-Bookmall)-2 (0) | 2021.10.07 |
---|---|
JDBC 처음부터 끝까지 사용해 보기(proj-Bookmall)-1 (1) | 2021.10.05 |
JDBC (Programming) 실습 (0) | 2021.10.05 |
JDBC (Programming) (0) | 2021.10.05 |
Java 입문 개발(환경 변수) 설정 tip.이클립스 설정 (0) | 2021.09.06 |