//////
Search
📓

10/05 회고록

생성일
2022/10/05 07:16
태그

김기헌

Dependency(의존)이란?

“A가 B를 의존한다”는 상황에서 의존 대상 B가 변하면 그것이 A에 영향을 미친다는 것이다.
음식점을 예로 들면, “식당의 요리사는 음식의 레시피에 의존한다.”
음식의 레시피가 변화하게 되었을 때, 요리사는 음식 만드는 방법을 수정해야 한다. 레시피의 변화가 요리사의 행위에 영향을 미쳤기 때문에 “요리사는 레시피에 의존한다”라고 말할 수 있다.
코드로 표현하면 다음과 같다.
class Chef { private Recipe recipe; public Chef(){ Recipe = new Recipe(); } }
Java
복사

Interface, 의존관계, List활용 예제

package _1005.collection; import java.util.ArrayList; import java.util.List; public class LikeLion2th { private List<String> students = new ArrayList<>(); private List<Student> studentsObj = new ArrayList<>(); public LikeLion2th(){ Names names = new Names(); this.students = names.getName(); this.studentsObj = names.getStudentObjs(); } public List<String> getStudentList(){ return this.students; } public List<Student> getStudentListObj(){ return this.studentsObj; } }
Java
복사
package _1005.collection; import java.util.List; public class ListPracticeMain { public static void main(String[] args) { LikeLion2th likeLion2th = new LikeLion2th(); //2기 학생의 이름이 들어있는 list를 return하는 method List<String> students = likeLion2th.getStudentList(); List<Student> studentObj = likeLion2th.getStudentListObj(); for(String student:students){ System.out.println(student); } //for each문 자동완성 -> iter for (Student student : studentObj) { System.out.println(student); } } }
Java
복사
package _1005.collection; import java.util.ArrayList; import java.util.List; public class Names { private List<String> students = new ArrayList<>(); private List<Student> studentObjs = new ArrayList<>(); public List<Student> getStudentObjs(){ this.studentObjs.add(new Student(2,"김기헌","https://github.com/KimKiheon?tab=repositories")); this.studentObjs.add(new Student(1,"권하준", "https://github.com/dongyeon-0822/java-project-exercise")); this.studentObjs.add(new Student(1,"조성윤","https://github.com/kang-subin/Java")); this.studentObjs.add(new Student(3,"안예은","https://github.com/KoKwanwun/LikeLion.git")); this.studentObjs.add(new Student(1,"남우빈","https://github.com/lcomment/Algorithm_Solution--Java/tree/main/LikeLion")); return studentObjs; } public List<String> getName() { students.add("권하준"); students.add("조성윤"); students.add("안예은"); students.add("남우빈"); students.add("최경민"); return students; } }
Java
복사
package _1005.collection; public class Student { private int classNumber; private String name; private String gitRepositoryAddress; public Student(int classNumber, String name, String gitRepositoryAddress){ this.classNumber=classNumber; this.name=name; this.gitRepositoryAddress=gitRepositoryAddress; } //list 출력시 사용 ***** @Override public String toString(){ return "classNumber: "+classNumber + " name: "+name+" git주소: "+gitRepositoryAddress; } }
Java
복사
toString Override

CodeUp 1011~1020

김상호

객체지향프로그래밍 OOP (Object Oriented Programming)

캡슐화 : 하나의 객체에 대해 특정한 목적을 위해 필요한 변수나 메소드를 하나로 묶는 것
추상화 : 공통의 속성이나 기능을 묶어 이름을 붙이는 것
다형성 : 부모클래스에서 물려받은 함수를 자식 클래스에서 오버라이딩 되어 사용되는 것
상속성, 재사용 : 상위 개념의 특징을 하위 개념이 물려받는 것

다형성 예)

친구들과 게임하러 가자고 얘기를 했을 때 다 같은 게임을 하지 않더라도 PC방을 간다. 이때 게임이라는 추상적 객체를 상속받은 친구들 이라는 모든 객체들에게 명령이 입력되었고 리그오브레전드 게임을 하러가던지 피파온라인을 하러가는것이다. 다형성이 없다면 리그오브레전드 하러가자, 피파온라인 하러가자고 따로따로 말해줘야한다.

추상화 예)

코끼리, 사자, 호랑이, 강아지 -> 동물 제네시스, 소나타, 그랜저 -> 자동차

SOLID

OCP (개방-폐쇄 원칙) : 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
LSP (리스코프 치환 원칙) : 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.” 계약에 의한 설계를 참고해야한다.
ISP (인터페이스 분리 원칙) : 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
DIP (의존관계 역전 원칙) : 프로그래머는 “추상화에 의존해야지, 구체화에 의존하면 안된다.” 의존성 주입은 이 원칙을 따르는 방법 중 하나다.

Pojo

POJO (Plain Old Java Object)는 오래된 방식의 간단한 자바 오브젝트라는 뜻으로 쉽게 말해 특정 기술에 종속되어 동작하는 것이 아닌 순수한 자바 객체를 말하는 것이다.

IoC(Inversion of Control)

제어의 역전, di랑 비슷하다. 스프링에서는 오브젝트 생성과 의존 관계 설정, 사용, 제거 등을 스프링 컨테이너가 담당하기 때문에 스프링 컨테이너를 IoC 컨테이너라고 부른다.

이가현

임학준

Array List의 사용

ArrayList는 배열과 달리 용량이 자동으로 증가한다
List컬렉션에는 변수의 저장값이 아닌 객체의 주소값이 저장된다
public class ListPractceMain { public static void main(String[] args) { LikeLion2th likeLion2th = new LikeLion2th(); List<String> students = likeLion2th.getStudentList();
Java
복사
List<String>은 List 컬렉션에 저장되는 객체를 String 타입으로 저장하겠다는 뜻이다
private List<String> students = new ArrayList<>(); public List<String> names(){ this.students.add("권하준");//ALT + J this.students.add("조성윤"); this.students.add("안예은"); this.students.add("남우빈"); this.students.add("최경민");
Java
복사
데이터를 수정할때 ALT+J(Intellij)로 한번에 변경이 가능하다

조국현

인텔리제이에서 깃헙 사용법

아직은 익숙하지 않으니 사용법을 익힌다.
1.
github에서 리모트 레포지토리 생성
2.
인텔리제이에서 Create Git Repository
3.
인텔리제이에서 ‘Manage Remote’에서 깃헙에서 생성한 레포지토리를 지정
4.
코드 추가, 수정이 끝나고 나면 좌측 Commit을 누른 뒤 커밋 메시지를 적어준다.
5.
원하는 브랜치로 변경
6.
push

인터페이스

처음 클래스를 배울 때의 느낌, 머리로는 알겠는데 코드로 여러 파일에 나눠서 쳐야 해서 느리게 따라갔음.
인터페이스 : 객체의 사용 방법을 정의한 타입
객체의 교환성을 높여줌
개발 코드와 객체가 통신하는 접점 역할 (객체 내부 구조 알 필요 없이 인터페이스의 메소드만 알면 됨)
클래스에 변화를 줄 때는 인터페이스에 의존한다. → 개발코드를 수정하지 않아도 됨

인터페이스 선언

[public] interface 인터페이스명 { ... }
Java
복사

코드업 문제 풀이

최아영

객체지향 개발 5대 원리

단일 책임 원칙(SRP: Single Responsibility Principle)
클래스는 한가지 기능만 가지며 한가지 책임을 수행하는데 집중되어야 한다는 원칙이다.
책임 영역이 확실해지기 때문에 한 책임의 변경에서 다른 책임의 변경으로의 연쇄작용에서 자유로울 수 있다.
개방폐쇄의 원칙(OCP: Open Closed Principle)
소프트웨어의 구성요소는 확장에는 열려있고 변경에는 닫혀있어야 한다는 원칙이다.
변경을 위한 비용은 가능한 줄이고 확장을 위한 비용은 가능한 극대화 해야 한다는 의미이다.
리스코브 치환의 원칙(LSP: Liskov Substitution Principle)
서브 타입은 언제나 기반 타입으로 교체할 수 있어야 한다.
인터페이스 분리 원칙(ISP: Interface Segregation Principle)
한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다는 원칙이다.
의존성역전의 원칙(DIP: Dependency Inversion Principle)
구조적 디자인에서 발생하던 하위 레벨 모듈의 변경이 상위 레벨 모듈의 변경을 요구하는 위계관계를 끊는 의미의 역전이다.
실제 사용 관계는 바뀌지 않으며 추상을 매개로 메시지를 주고 받음으로써 관계를 최대한 느슨하게 만드는 원칙이다.

List 컬렉션

List
순서가 있는 데이터의 집합이다.
데이터의 중복을 허용한다.
ArrayList
데이터를 순차적으로 저장한다.
크기가 가변적으로 변한다.
주요 메소드
boolean add(E e)
주어진 객체를 맨 끝에 추가
void add(int index, E e)
주어진 인덱스에 객체를 추가
boolean contains(Object o)
주어진 객체를 포함하고 있는지 확인
boolean isEmpty()
컬렉션이 비어있는지 확인
int size()
저장된 객체 수 반환
boolean remove(Object o)
주어진 객체를 삭제
E remove(int index)
주어진 인덱스에 저장된 객체를 삭제