ALLYES
[2022년 청년친화형 기업 ESG지원 사업 - 12] 본문
일시 : 2022.09.21
시간 : 9:00 ~ 18:00
오전/오후 : Java
- 절차 지향 프로그래밍(C언어, Fortran, COVOL)
- 개념
- 물 흐름 (위 -> 아래)
- 위에서 아래로 왼쪽에서 오른쪽으로 순서있게 프로그래밍 하는 기법
- 설계 속도가 빠름
- 단점
- 유지보수 어려움 : 오류가 발생하면 프로그램 전체 오류가 되기 때문
- 개념
- 객체 지향 프로그램(C++, Python, Java)
- 개념
- 패러다임(우리가 가지고있는 사고방식)
- 프로그램 패러다임
- 기능 별로 묶어서 프로그래밍 하는 기법
- 장점
- 유지보수 용이
- 신뢰성 있는 소프트웨어를 쉽게 작성 가능
- 코드 재사용이 쉽다
- 직관적인 코드 분석이 가능
- 소프트웨어 생산성이 향상
- 단점
- 설계 속도가 느림
- 구성요소
- 클래스
- 개념
- 객체를 만들기 위한 설계도
- 구성요소
- 객체의 속성(필드)
- ex) 키, 나이, 몸무게, 성별
- 객체의 기능(메소드)
- ex) 먹다, 달린다, 잔다, 싸운다
- 예시
- 김연아의 나이, 뽀로로의 나이
- 질문에 바로 대답(객체)
- 클래스에 대한 실체
- 사람의 나이, 펭귄의 나이
- 누구? 되묻는 경우
- 김연아의 나이, 뽀로로의 나이
- 객체의 속성(필드)
- 개념
- Object(객체)
- 클래스를 통해 만들어진 결과물
- 클래스
- 특징
- 추상화(Abstraction)
- 객체에서 공통된 속성과 행위를 추출하는 기법
- 코드 상에서 구현(로직)부분을 제외한 오직 선언 부분만을 설계
- 상세한 정보는 무시하고 필요한 정보들만 간추려서 구성
- 캡슐화(Encapsulation)
- 관련된 필드(속성)와 메소드(기능)을 하나로 묶고, 실제 구현 내용을 외부로부터 감추는 기법(정보은닉)
- 만일의 상황(타인이 외부에서 조작)을 대비하여 특정 속성이나 메소드를 사용자가 조작할 수 없도록 숨겨 놓은 것
- 외부에서는 공개된 메소드(기능)의 인터페이스를 통해 접근 가능
- Scanner, Random, Arrays, Math
- 상속(Inheritance)
- 이미 작성된 클래스(상위클래스)의 특성을 그대로 이어받아 새로운 클래스(하위클래스)를 생성하는 기법
- 기존 코드를 재사용 하거나 재정의 => 재사용 + 확장
- extends 사용
- 추상화(Abstraction)
-
- 다형성(Polymorphism)
- 사전적 의미 : 다양한 형태로 나타날 수 있는 능력
- 같은 기능(메소드)을 호출하더라도 객체에 따라 다르게 동작하는 것
- 상위클래스의 동작을 하위클래스에서 다시 정의하여 사용하는 것
- 오버라이딩
- 장점
- 1. 유지보수가 쉬움
- 여러 객체를 하나의 타입으로 관리가 가능하기 때문에(코드관리 용이)
- 2. 재사용성 증가
- 객체를 재사용하기 쉬워지기 때문에 코드 재사용 증가
- 1. 유지보수가 쉬움
- 조건
- 상속관계(클래스 간)
- 오버라이딩(재정의) 필수
- 업캐스팅(자식 클래스의 객체 --> 부모 클래스 타입 형 변환)
- 부모 타입으로 자식 클래스를 업캐스팅하여 객체 생성
- 다형성(Polymorphism)
- 그 외
- 접근 제한자
- 1. public : 모두에게 접근 허용 가능
- 2. private : 본인만 접근 허용 가능
- 3. protected : 상속/같은 패키지 안의 클래스에서만 접근 가능
- 4. default : 같은 패키지 안의 클래스에서 접근 가능
- 오버라이딩 : 재정의
- 오버로딩 : 중복정의
- 개념
예제 코드
public class Mouse {
// 1. 추상화
// - 생각으로 떠올린다.(필드나 메소드의 공통점을 찾는다)
// - 상세화된 정보는 무시
// - 코드상에서 구현 부분만 해당
//필드
//Mouse 클래스 만들기 위한 변수 생성
public String name;
public int age;
//메소드
public void sing() {
System.out.println("울어요");
}
}
public class practice {
public static void main(String[] args) {
System.out.println();
}
// 오버라이딩 : 재정의
// 오버로딩 : 중복정의
// 2. 캡슐화
// 정보의 은닉
// 사용자가 못 꺼내게 은닉한다.
// 실제 구현한 내용을 외부로부터 감추는 기법
// --> 타인이 필드나 메소드를 조작할 수 없도록 숨겨 놓은 것
// 3. 상속
// 물려주다, 물려주는 쪽(부모)/ 물려받는쪽(자식)
// 물려받는다 -> 기존 코드를 그대로 재사용, 재정의
// 이미 작성된 클래스의 특성을 그대로 이어받아서 새로운 클래스를 생성 기법
// 오버라이딩과 비슷한 개념
}
public class Soju {
//필드 구성
String type; //타입
String model; //모델
// 생성자(객체 값 셋팅)
// 생성자 특징 생성자 이름 = 클래스 이름
public Soju(String type, String model) {
this.type = type;
this.model = model;
}
public Soju() {
// 디폴트 생성자
super(); // 자식 생성자에서 부모 객체의 생성자 호출 사용하는 키워드
}
//메소드
public void drink() {
System.out.println("마셔");
}
public void mix() {
System.out.println("섞어");
}
//Getter // Setter
//Getter 메소드 : 외부에서 객체의 데이터 조회
//Setter 메소드 : 외부에서 메소드를 통해서 데이터에 접근(수정)
public String getType() {
return type;
}
public String getModel() {
return model;
}
}
public class Chungha extends Soju {
//필드 입력
String flv; // 맛
int BV; // 도수
//생성자 입력
public Chungha(String model, String flv) {
super("별빛청하", model);
this.model = model;
this.flv = flv;
}
//생성자 오버로딩 : 중복정의
public Chungha(String model, String flv, int BV) {
super("별빛청하", model);
this.model = model;
this.flv = flv;
this.BV = BV;
}
// 메소드 입력
public void flavordrink() {
System.out.println(model + "소주의 " + flv + "맛 ");
}
// Getter
public String getFlv() {
return flv;
}
public int getBV() {
return BV;
}
}
public class Soju_example {
public static void main(String[] args) {
// 별빛청하 소주 레몬맛 객체 생성
Chungha ch = new Chungha("별빛청하 ", "레몬 ", 7);
// Soju 클래스로부터 상속
System.out.println("타입 : " + ch.getType());
System.out.println("도수 : " + ch.getBV());
// Chungha 클래스로부터 상속
System.out.println("맛 : " + ch.getFlv());
ch.flavordrink();
}
}
public class Book {
// 4. 다형성
// 리모컨 한개 - 여러개 기능 구현
// 같은 기능을 호출했지만 객체에 따라서 다르게 동작하는 것
// 상위 클래스의 동작 하위 클래스에서 다시 정의
public String name; //책이름
public String pub; //지은이
public Book() { //디폴트 생성자 생성
this.name = "";
this.pub = "";
}
public Book(String name, String pub) {
this.name = name;
this.pub = pub;
}
public void print() {
System.out.println("print : Book");
}
}
public class Novel extends Book{
// 다형성 첫번째 조건
// 클래스 간 상속 관계
public String name;
public String pub;
// 생성자
public Novel(String name, String pub) {
super(name, pub);
}
// 다형성 두번째 조건
// 오버라이딩
@Override
public void print() {
System.out.println("print:Novel");
}
}
public class SF extends Book{
// 다형성 첫번째 조건
// 클래스 간 상속 관계
public String name;
public String pub;
// 생성자
public SF(String name, String pub) {
super(name, pub);
}
// 다형성 두번째 조건
// 오버라이딩
@Override
public void print() {
System.out.println("print:Novel");
}
}
public class BookMain {
public static void main(String[] args) {
Book b = new Novel("메타버스 소설", "출판사A");
Book c = new SF("판타지 소설", "출판사A");
// 업캐스팅 : 자식 클래스 객체를 부모클래스로 형변환
b.print(); // overriding
c.print();
// 부모 클래스로 객체를 선언했지만
// 실행시점에서 자식클래스의 멤버함수가 호출
// instanceof --> 객체의 타입 확인
// 객체 instanceof 타입
// print() : print: Book / Novel
if (b instanceof Novel) {
b.print(); // Novel : b 타입 Novel
// Book : b 타입 Book
}
if (c instanceof SF) {
c.print();
}
}
}
오후 Java
- 돼지저금통 클래스
- 속성(필드)
- 금액(money)
- 기능(메소드)
- 입금
- 출금
- 잔액 확인
- 속성(필드)
package 오후;
public class PiggyBank {
//돼지 저금통 클래스
int money = 0; // 돈
public void deposit(int inputMoney) {
money += inputMoney;
}
public void withdraw(int outputMoney) {
money -= outputMoney;
}
public void showMoney() {
System.out.print("현재 잔액 : " + money);
}
}
package 오후;
public class PiggyBankMain {
public static void main(String[] args) {
// 저금통에 1500원 입금
// pg : 레퍼런스 변수 선언
PiggyBank pg;
pg = new PiggyBank();
System.out.println(pg);
//저금통에 1500원 입금
pg.deposit(1500);
pg.showMoney();
// 저금통에서 700원 인출
pg.withdraw(700);
pg.showMoney();
PiggyBank pg2 = new PiggyBank();
System.out.println(pg2);
// pg.money(1000);
}
}
- 생성자의 특징
- 생성자는 메소드이다
- 생성자 이름은 클래스 이름과 동일
- 생성자는 리턴 타입을 지정할 수 없다
- 생성자는 new를 통해 객체를 생성할 때만 호출됨
- 생성자는 하나 이상 선언되어야 함
- 개발자가 생성자를 정의하지 않으면 자동으로 기본 생성자가 정의됨
- 컴파일러에 의해 자동생성
- 기본 생성자를 디폴트 생성자(default constructor)라고도 함
- 만약 default 생성자만 존재하고 default에 아무런 기능이 없을 경우 생략이 가능함
- 개발자가 생성자를 정의하지 않으면 자동으로 기본 생성자가 정의됨

package 오후;
public class Person {
private String name;
private int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
package 오후;
public class PersonMain {
public static void main(String[] args) {
Person[] pArray;
pArray = new Person[4];
System.out.println(pArray);
System.out.println(pArray[0]);
pArray[0] = new Person("김미희", 20);
pArray[1] = new Person("이수환", 22);
pArray[2] = new Person("김수린", 18);
pArray[3] = new Person("황지영", 15);
System.out.println(pArray[0].getName() + ", " +pArray[0].getAge());
// Person p1 = new Person("김미희", 20);
// Person p2 = new Person("이수환", 22);
// Person p3 = new Person("김수린", 18);
// Person p4 = new Person("황지영", 15);
//
//
// System.out.println(p1.getName() + ", " + p1.getAge());
// System.out.println(p2.getName() + ", " + p2.getAge());
// System.out.println(p3.getName() + ", " + p3.getAge());
// System.out.println(p4.getName() + ", " + p4.getAge());
}
}
'ESG' 카테고리의 다른 글
| [2022년 청년친화형 기업 ESG지원 사업 - 14] (0) | 2022.09.23 |
|---|---|
| [2022년 청년친화형 기업 ESG지원 사업 - 13] (0) | 2022.09.22 |
| [2022년 청년친화형 기업 ESG지원 사업 - 11] (0) | 2022.09.20 |
| [2022년 청년친화형 기업 ESG지원 사업 - 10] (0) | 2022.09.19 |
| [2022년 청년친화형 기업 ESG지원 사업 - 9] (0) | 2022.09.17 |