
2021.11.5(금) 주말 숙제로 추상클래스 연습 (실습 파일 위치: 09 Polymorphism > src > com > kh > hw > practice3) package com.kh.practice3.model.vo; public abstract class Animal { private String name; private String kinds; protected Animal() { //super(); } protected Animal(String name, String kinds) { //super(); this.name = name; this.kinds = kinds; } public String getName() { return name; } public void setName(String..

2021.11.9(화) 🌿 과제 내용 추상클래스, 객체 배열 활용 → 영화관 예매 앱 만들기 (+이 아이디어를 구현할 다른 팀에게 전달할 문서도 작성) 처음에 주어진 시간 = 3시간 → 결국 6시간 활동 🌿 회고 어려웠던 점 주제 선정 시 주어진 시간에 우리가 이용 가능한 기술로 실현 가능한 주제(대상 및 기능)를 정확히 파악하고 결정해야 하는 점 + 핵심 기능의 선택과 집중 원격 회의를 해야 할 때 효율적인 역할 분담 및 협업 방법 문서화의 절차 및 형식에 익숙치 않은 점 - 특히 우리가 주어진 시간에 정확히 무엇을 얼만큼 할 수 있는지 감이 없는 상태에서 프로그램 기획을 해야 하는 점이 어려웠다 깨달은 점 우리반에는 잘하는 학우분들이 많다 여러 사람이 모이면 다양하고 재미있는 아이디어가 나온다(주제 ..

2021.11.1(월) 🌿 프로그래밍언어(Java) 활용 평가 서술형 문제 해결 시나리오 🌿 미니 팀 프로젝트(다형성) (파일 위치: 09polymorphism > src > com > kh > practice > chap01_poly) 📗 소감 Java 문법 후반부 공부를 깊게 하지 못했는데, 그래서 이번 팀 프로젝트 과제가 어렵게 느껴졌다. 다형성 등 객체 지향 개념은 다 이해했다고 생각했는데, 코드로 써지지 않았다.. 또 막상 배열 초기화 등도 직접 해보려니 잘 안 써졌다. 코드는 꼭 손으로 쳐봐야겠다

2021.10.29(금) 🌿 객체 지향 프로그래밍 🌱 추상클래스 표현법: 접근제한자 abstract class 클래스이름 (abstract: 예약어로써, 추상클래스, 추상메소드 선언 시 붙임) 추상메소드가 존재하는 순간 추상클래스로 정의됨 → abstract라는 예약어를 사용해서 정의해야 함 객체 생성이 불가능함 부모 클래스 구실은 가능 → 다형성 적용 가능 추상 클래스 = 미완성 설계도, 구체적인 구현을 빼버리고 추상화만 한 것 추상 클래스 = 추상메소드 + 일반필드 + 일반메소드 → 3가지 모두 생략 가능, 개발자의 역량/판단에 따라 추상 메소드가 없어도 추상 클래스로 정의 가능 사용 examples 개념적으로 개발자가 판단했을 때 해당 클래스가 아직 구체적으로 덜 구현된 상태인 것 같을 때 기술적으..

2021.10.28(목) 🌿 개념 '여러 개의 형태를 갖는다'는 의미 상속을 이용한 기술로, 부모 타입으로부터 파생된 여러 가지 타입의 자식 객체를 부모 클래스 타입 하나로 다룰 수 있는 기술 상위 타입으로 하위 타입의 객체를 사용할 수 있는 기술 🌱 Binding 다형성이 적용된 경우 메서드 오버라이딩이 되어 있으면, 정적으로 바인딩된 메서드 코드보다 오버라이딩된 메서드 코드를 우선적으로 수행 = 동적 바인딩 정적 바인딩 = 프로그램이 실행되기 전에 컴파일 되면서 모든 메서드는 정적 바인딩됨 동적 바인딩 = 컴파일 시 정적 바인딩된 메서드를 실행할 당시의 객체 타입을 기준으로 바인딩됨 🌱 활용 예시1) 상속 관계에 있는 하나의 부모 클래스 타입의 배열 공간에 여러 종류의 자식 클래스 객체를 저장할 수 ..

2021.10.27(수) 🌿 개념 기존의 클래스(부모 클래스)를 재사용하여 새로운 클래스(자식 클래스)를 작성하는 것 기존 클래스를 확장/특화하는 것 → 자식 클래스 extends 부모 클래스 코드의 중복을 줄이고 프로그램의 확장성 향상 "자식 is-a 부모" 관계 클래스의 상속은 단일 상속만 가능 인터페이스 상속/구현은 다중 상속 가능 🌿 오버라이딩 부모 클래스로부터 상속받은 메서드의 몸체를 자식 클래스에서 재정의하는 것(o) 그대로 사용(x) 부모-자식 클래스에서 같은 이름의 메서드가 다른 기능을 수행하게 됨 접근 제어자의 가시성/접근 범위는 같거나 커져야 함 Overloading vs Overriding (메서드)Overloading = 한 클래스 내에서 같은 이름의 메서드를 여러 개 정의하는 것 ..

2021.10.26(화) 🌿 클래스 MVC 패턴 = Model + View + Controller 기능에 따라 서브시스템들을 구분 = 도메인 지식 관리하는 Model + 사용자에게 보여주는 View + 사용자와의 상호작용 제어하는 Controller 🌱 생성자 표현법 목적/기능 → 객체 생성 시, 기본 생성자 사용해서 객체 생성 후 setter를 이용해서 필드값 초기화, 또는 객체 생성과 동시에 필드값을 초기화 public class User { /* User 클래스의 객체 생성: User go = new User(); * 객체 생성 시 new(새로 만든다)라는 키워드 뒤 '클래스명()' 이게 생성자(constructor) * * 대입연산자(=): 우항의 값을 좌항의 공간에 대입 -> User 클래스의 ..

2021.10.25(월) 🌿 캡슐화 public class Run { /* 캡슐화 과정을 통해 완벽한 클래스의 형태를 갖추게 하자 * 캡슐화를 하지 않으면 외부로부터 직접 접근이 가능하기 때문에 함부로 값이 변질되거나 조회를 막지 못하는 문제가 발생 * cf. 정보 보안 3요소: 기밀성, 무결성, 가용성 * * 캡슐화 작업 = 정보 은닉 기술 중 하나; 정보 보안의 기밀성과 무결성을 지킬 수 있게 함; 캡슐 안에 숨기는 것 -> 데이터의 접근 제한( 외부에서 접근할 수 없도록) * 1. 값 숨기기: 멤버변수의 접근제한자 public 대신 private으로 바꿔서/사용해서 외부(다른 패키지)에서의 접근을 막음 * 2. 클래스 외부에서 간접적으로 값을 처리할 수 있는 메소드(getter(값 가져오기), se..

2021.10.22(금) 🌿 배열 🌱 배열 복사 ✔️ 얕은 복사 = 배열의 주소 값만 복사 → 참조 대상(배열의 내용물)은 동일한 것을 가리키고 있음 ✔️ 깊은 복사 = 동일한 새로운 배열을 하나 생성해서 실제 내부값까지 복사 방법1) 반복문 방법2) System.arraycopy() 메서드 사용 방법3) Arrays.copyOf() 메서드 사용 방법4) clone() 메서드 사용 비둘기집 원리 = hashcodes가 같다고 해서 둘이 같다고 할 수는 없으나, hashcodes가 다르면 둘은 다름 🌿 객체 - Java는 객체(object) 지향(프로그래밍 방법 중의 하나)을 지원하는 프로그래밍 언어 - 객체 = 실제로 존재하는 것(사물 또는 개념) → 객체 지향 이론 = 실제 세계는 사물/객체로 이루어져..

2021.10.21(목) 🌿 배열(Array) 🌱 개념 하나의 공간에, "같은 자료형의" 여러 개의 값들을 담을 수 있음 배열 선언 시 앞에 자료형 써줘야 함 배열 = 순서가 있는 공간 → 순서가 있음 = index가 있음 → index가 있는 공간/칸이 만들어짐 배열의 각 index("색인, 목록") 자리에 실제 값이 담김 → index = 배열의 각 방 index는 0부터 시작 + 같은 크기로 만듦 Q. 배열을 사용하는 이유 🌱 선언 및 할당 배열 할당 = 이 배열에 몇 개의 값이 들어갈지/index 몇 개 쓸지/공간 몇 개 필요한지, 배열의 크기를 정해주는 과정 → 지정한 갯수만큼 값이 들어갈 공간이 만들어짐 🌱 값 대입 배열의 각 index 자리에 값 대입 배열이름[index값] = 대입하고자 하..

2021.10.20(수) 🌱 반복문 while문 예시들을 개념과 대비해서 잘 보자 무작위(random) 수까지의 합 구하기 /* while문: 또 다른 종류의 반복문 * * 표현법 * 초기식; // 필수는 아님 * while(조건식) { * (조건식이 true일 때) 반복적으로 실행할 코드; // a * 증감식; // 필수는 아님 * } * * 괄호 안의 조건식이 true일 경우 해당 구문(a)을 반복적으로 실행 * while(true): 무조건 반복시킴 -> 무한반복 */ public void method1() { // method1 영역 시작 // i가 1~5일 때 인사하기: 구현 방법은 다수 // 초기식 // 제어변수 i, j, k // 방법1) System.out.println("[방법1]"); ..

2021.10.19(화) 🌱 조건문 switch문 /* switch문 * 위->아래로 순차적으로 실행(o) 해당 값 case로 jump/pass(x); 단, c언어 등에서는 goto를 통해 진짜 jump하는 코드 있긴 함 * 동등비교 -> 해당 case(층수) 버튼 누르고 (다른 층들 거쳐 해당 case 층으로) 엘리베이터 타고 내려감 * * 표현식: * switch(아래에 기술할 값들과 동등 비교를 할 대상자) { * switch(정수, 문자, 문자열) { * * case 값1(정수, 문자, 문자열) : 대상자(값) == 값1이 true일 경우 실행할 코드1; // 지금까지 배운 '값' = literal값; Java 최신 version에서만 값 이외에도 변수명 입력 가능 * // 동등 비교 결과가 fa..

2021.10.18(월) 🌿 제어문(control statement) 프로그램의 흐름(flow)을 바꾸는 역할을 하는 문장 = 조건문(조건에 따라 다른 문장이 수행되도록 함) + 반복문(특정 문장들을 반복해서 수행) 🌱 조건문 if문 홀/짝수 판별 else (if) 정수 입력받고 양수/0/음수 판별 주민번호 입력 후 성별 판별 나이별 호칭 판별 계절 판별 로그인 기능 로직 📗 소감 논리를 프로그래밍 언어로 표현해서 의도한대로 연산 결과를 내도록 만드는 것이 (아직까지는) 무척 재미있다! 조건이 들어가니 프로그램이 훨씬 풍부해졌다. 📗 homework: if문 키보드로 정수 두 개를 입력 받아 각각 변수(num1, num2)에 저장하세요. 그리고 또 다른 정수를 입력 받아 그 수가 num1 이하거나 num..

2021.10.15(금) 🌿 강제 형 변환 // 강제/명시적 형 변환 : 큰 바이트 -> 작은 바이트 public void forceCasting() { // (바꿀 자료형)값 // 1. double(8bytes) -> float(4bytes) float f1 = 4.0f; double d2 = 8.0; float f2 = (float)d2; // double형을 float형으로 저장하려면 강제형변환 필요 System.out.println(f2); // 2. double(8bytes) -> int(4bytes) double d3 = 10.89; int i3 = (int)d3; // double형을 int형으로 저장하려면 강제형변환 필요 System.out.println(i3); // 10 출력; 소수점 ..

2021.10.14(목) 🌿 출력문 /* 1. 지금까지 9개의 자료형을 위와 같이 선언했고, * 2. 9개의 값을 초기화 진행했음 * 3. 9개의 값이 제대로 들어갔는지 확인해보기 * 출력양식: "변수이름 : 변수값"; Run 클래스에서 실행 */ System.out.println("isTrue : " + isTrue); System.out.println("isFalse : " + isFalse); System.out.println(); // 콘솔 출력에서 가독성을 위해 한 줄 띄어쓰기 System.out.println("bNum : " + bNum); System.out.println("sNum : " + sNum); System.out.println("iNum : " + iNum); System.ou..