//////
Search

221005

local Repository(내 컴퓨터) 와 remote Repository(GitHub) 연결

1.
인텔리제이로 자바 프로젝트 만들기.
2.
화면 상단바, VCS에서 Create Git Repository 선택 후 OK.
3.
java 파일 생성 한 뒤, “ctrl + K” 누르고, 커밋 메세지 작성 후 커밋하기 ( github에 push할 파일만 선택할 것)
4.
화면 우측 하단의 master branch 누르고 new branch 를 main으로 추가.
5.
github의 Repository에서 새로운 repository 만들고 주소 복사
6.
인텔리제이 상단바, Git에서 Manage Remotes누르고 “+”로 복사한 주소를 추가.
7.
push하기

Static과 Class

하나의 클래스 안에서 메인 메소드와 일반 메소드를 동시에 선언할 경우, 일반 메소드에는 static 키워드를 사용해야 함.
//메인 메소드는 기본적으로 static 메소드이고, //static 메소드 내부에선 인스턴스 멤버의 직접 사용이 불가능함. public class UserDao { public static void plus(int first, int second) { System.out.println(first + second); } public static void main(String[] args) { plus(1, 2); } } //일반 메소드에 static 을 사용하지 않는 경우, //메인 메소드에 객체 생성하는 과정을 거치면 사용이 가능해짐. public class UserDao { public void plus(int first, int second) { System.out.println(first + second); } public static void main(String[] args) { UserDao dao = new UserDao(); dao.plus(1, 2); } }
Java
복사
하나의 클래스 모든 코드를 넣지 않고 여러 클래스로 분리 작성 하는 이유 : 객체 지향 언어의 가장 큰 특징, 다형성 활용을 위함.

Java의 원칙과 특징.

1.
SOLID : OOP(객체 지향 프로그래밍)의 다섯 원칙
SRP (Single Responsibility Principle) : 단일 책임 원칙
하나의 클래스는 하나의 역할(책임)만을 가지도록 클래스를 분리 작성한다.
OCP (Open Closed Principle) : 개방 폐쇄 원칙
확장에는 열려있고(다형성 활용) 변경에는 닫혀있어야 한다.
LSP (Listov Substitution Principle) : 리스코프 치환 원칙
인터페이스 혹은 상속을 통해 클래스가 자유롭게 업(다운)캐스팅 되어야 한다.
ISP (Interface Segregation Principle ) : 인터페이스 분리 원칙
하나의 클래스가 지닌 여러 역할(책임)을 가질 경우. 각 인터페이스는 따로 분리 작성해야한다.
DIP (Dependency Inversion Principle) : 의존 역전 원칙
변하기 쉬운(교체가 빈번한) 요소는 반드시 추상화된 인터페이스 혹은 상위 클래스로 작성해야한다.
2.
DI (Dependency Injection) : 의존성 주입
외부에서 의존성 객체를 주입하는 것
ex ) 한 클래스의 생성자 매개변수로 인터페이스 구현체( 의존성 객체)를 사용함.
3.
POJO (Plain Old Java Object) : 오래된 방식의 간단한 자바 오브젝트
자바가 지닌 객체 지향적 설계의 장점을 포기하고 특정 기술과 환경에 종속 되어서는 안 됨.

인터페이스를 활용한 객체 지향적 코딩 실습.

목표
두 정수 a, b를 입력받아 서로 더하고, 연산 과정과 결과값을 짝수 홀수 판별함
판별 결과를 문자열(한글, 영어)로 출력
설계
문자열 출력 메소드를 인터페이스를 통해 추상화한 뒤, “한글 출력”과 “영어 출력” 클래스로 각각 구체화 해서 다형성을 활용.
과정
// 1. 문자열 출력 메소드를 인터페이스에 선언. public interface Word { public String getWord(int a); }
Java
복사
// 2. 위의 인터페이스를 상속해 서로 다른 두 클래스 구현. // 2-1. 한글 출력 클래스 public class EvenOrOddK implements Word{ @Override public String getWord(int a) { if(a % 2 == 0) { return "짝수"; } else { return "홀수"; } } } // 2-2. 영어 출력 클래스 public class EvenOrOddE implements Word{ @Override public String getWord(int a) { if(a % 2 == 0) { return "Even"; } else { return "Odd"; } } }
Java
복사
// 3. 위의 두 클래스를 사용해, Main 클래스(메소드)에서 사용할 클래스 작성. public class Judge { private Word word; // 생성자의 매개변수로 인터페이스 사용. // -> 즉, 2. 에서 작성한 두 클래스 모두 매개변수에 대입 가능. public Judge(Word word) { this.word = word; } // 2. 에서 작성한 메소드를 사용해 결과값 도출 메소드 작성. public void result(int a, int b) { System.out.println( word.getWord(a)+" + "+ word.getWord(b)+" = "+word.getWord(a+b)); } }
Java
복사
// 4. 실제 프로그램이 실행 될 Main 클래스 작성과 실행 public class Main { public static void main(String[] args) { // 한글 출력 클래스의 객체 대입 Judge judge = new Judge(new EvenOrOddK()); judge.result(5,6); // 영어 출력 클래스의 객체 대입 judge = new Judge(new EvenOrOddE()); judge.result(5,6); } }
Java
복사
// 출력 결과 홀수 + 짝수 = 홀수 Odd + Even = Odd
Java
복사

List<> 활용 예제

목표
반 번호, 이름, 개인 홈페이지 주소를 저장하는 Student 클래스로 List를 만들고 그 내용을 출력하기.
과정
// 1. 정보를 담을 Student 클래스 만들기. public class Student { // 필요한 정보를 변수로 선언 private int classNo; private String name; private String gitRepositoryAdrress; // 생성자를 통한 정보 입력 public Student(int classNo, String name, String gitRepositoryAdrress) { this.classNo = classNo; this.name = name; this.gitRepositoryAdrress = gitRepositoryAdrress; } // 결과 출력 시, 문자열 리턴을 위한 toString() 오버라이딩. @Override public String toString() { return classNo+" "+name+" "+gitRepositoryAdrress; } }
Java
복사
// 2. Student 클래스를 활용한 List 만들기 // List 사용을 위한 import. import java.util.ArrayList; import java.util.List; public class MakeList { // List 객체 생성. // Generic을 사용하여, List에는 Student 객체만 들어갈 수 있음. private List<Student> studentObjs = new ArrayList<>(); // List의 .add()메소드를 활용한 정보 입력 메소드 // Student 클래스에서 작성한 생성자로, 객체 생성과 동시에 List에 정보 입력 public List<Student> getStudentObjs() { 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")); this.studentObjs.add(new Student(2,"최경민","https://github.com/cmkxak/likelion-java-course")); // 선언한 리턴타입(List<Student>)에 맞춰 스스로를 리턴 return this.studentObjs; }
Java
복사
// 3. 2. 에서 만든 클래스를 사용해, Main 클래스에서 사용할 클래스 작성. import java.util.ArrayList; import java.util.List; public class PrintList { // 2. 에서 만든 메소드를 사용하기 위해 객체 생성 MakeList makeList = new MakeList(); // 출력을 위한 빈 List 객체 생성 private List<Student> studentObjs = new ArrayList<>(); // 생성자를 통해서 빈 List에 정보 입력 public PrintList() { studentObjs = makeList.getStudentObjs(); } // List 호출 메소드 public List<Student> getStudentList() { return this.studentObjs; } }
Java
복사
// 4. Main 메소드에서 프로그램 실행 import java.util.List; public class Main { public static void main(String[] args) { // 3. 에서 만든 메소드 활용을 위해 객체 생성. // 객체 생성과 동시에 3.의 생성자 메소드에 작성한 대로 정보도 입력됨. PrintList printList = new PrintList(); // 빈 List 객체에 정보를 호출함. List<Student> studentObjs = printList.getStudentList(); // for문과 .get() 메소드를 통해 List에 입력된 정보를 한 줄씩 출력. for(int i = 0 ; i < studentObjs.size() ; i ++) { System.out.println(studentObjs.get(i)); } } }
Java
복사
// 출력 결과 1 권하준 https://github.com/dongyeon-0822/java-project-exercise 1 조성윤 https://github.com/kang-subin/Java 3 안예은 https://github.com/KoKwanwun/LikeLion.git 1 남우빈 https://github.com/lcomment/Algorithm_Solution--Java/tree/main/LikeLion 2 최경민 https://github.com/cmkxak/likelion-java-course
Java
복사