Notice
Recent Posts
Recent Comments
Link
«   2026/03   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

ALLYES

[2022년 청년친화형 기업 ESG지원 사업 - 12] 본문

ESG

[2022년 청년친화형 기업 ESG지원 사업 - 12]

Allyes_99 2022. 9. 21. 17:56

일시 : 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 사용
      •  다형성(Polymorphism)
        • 사전적 의미 : 다양한 형태로 나타날 수 있는 능력
        • 같은 기능(메소드)을 호출하더라도 객체에 따라 다르게 동작하는 것
        • 상위클래스의 동작을 하위클래스에서 다시 정의하여 사용하는 것
        • 오버라이딩
        • 장점
          • 1. 유지보수가 쉬움
            • 여러 객체를 하나의 타입으로 관리가 가능하기 때문에(코드관리 용이)
          • 2. 재사용성 증가
            • 객체를 재사용하기 쉬워지기 때문에 코드 재사용 증가
        • 조건
          • 상속관계(클래스 간)
          • 오버라이딩(재정의) 필수
          • 업캐스팅(자식 클래스의 객체 --> 부모 클래스 타입 형 변환) 
            • 부모 타입으로 자식 클래스를 업캐스팅하여 객체 생성
    • 그 외
    •  접근 제한자
      • 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());
	}

}