Java (15) 썸네일형 리스트형 22_자바로 석차 계산 가능한 성적표 만들기(클래스, ArrayList 활용) 00. 코로나 때문에 꿀같은 주말인데 밖에도 못 나가고 심심해서 옛날에 만들었던 프로그램을 다른 방법으로 만들어봤다. 자바로 석차 계산 가능한 성적 관리 프로그램을 만드는 방법은 다양하다. 예전에는 이차원 배열을 활용해서 만들었지만 이번에는 더 간단하게 클래스를 활용하여 만들었다. 이번 프로그램의 특징은 1. Student 클래스는 학번, 이름, 과목별 성적, 총점, 평균, 등급, 석차를 필드로 가지고 있다. 2. Student 클래스는 사용자로부터 입력 받는 메소드 부터 최종 결과 출력 메소드까지 포함하고 있다. 3. 석차를 제외한 모든 필드는 한꺼번에 입력 및 산출이 가능하다 (예: 1번 학생의 이름을 입력한 후, 과목별 성적을 입력하면 총점과 평균, 등급이 자동으로 계산되어 업데이트 된다. 그 이후.. 19_비밀번호 생성기 만들기 어느 날 심심해서 비밀번호 생성기를 만들어봤다. 사실 심심해서 만든 건 아니다. 얼마전(.....무려 6개월 전이네) 스팸메일함을 보고 깜짝 놀랐다. 메일 제목이 수년 전에 사용하던 비밀번호로 되어 있었기 때문이다. 이런 메일은 원래 열어보지 않는 것이 제일 좋지만 그래도 호기심을 참지 못하고 클릭해버렸다. 내용은 흔하디 흔한, 비트코인을 보내지 않으면 컴퓨터의 자료를 모두 망가뜨리고 개인정보까지 유출시키겠다는 이야기. 제목에 적혀있는 비밀번호도 어차피 엄청 옛날에 쓰던 것이고 메일 내용 자체도 말도 안 되는 이야기라 바로 삭제했지만 여러 사이트에서 같은 비밀번호를 사용하는 것이 얼마나 위험한지 새삼 느끼게 되었다. 그래서 비밀번호를 나름 나누어 사용하기로 결심했는데... 새로운 비밀번호를 만들어내기가 .. 18_자바 System 클래스 : exit 메소드, 프로그램 실행 소요 시간 구하기 00. System 클래스 -- java.lang.System 클래스를 이용하면 운영체제의 일부 기능을 이용할 수 있다. -- System 클래스의 모든 필드와 메소드는 static으로 구성되어 있다. 01. exit 메소드 -- 개발을 하다보면 JVM을 강제로 종료시킬 때가 있는데, 이 때 exit 메소드를 사용한다. -- int형 매개값을 지정하도록 되어있는데, 이 값을 종료상태값이라고 부른다. -- 일반적으로 정상 종료일 경우 0으로 지정하고 비정상종료일 경우 다른 값을 지정한다. -- System.exit()이 실행되면 보안관리자(Security Manager)의 checkExit() 메소드가 자동 호출되는데, 이 때 종료상태값을 조사하여 특정 값이 입력되었을 때만 JVM이 종료되도록 할 수 있다.. 17_자바 Objects 클래스 : 객체 비교(Comparator<T>) 00. 자바의 java.util.Objects 클래스를 최상위 클래스인 java.lang.Object 클래스와 헷갈리지 말자. 01. Comparator 인터페이스 구현을 통한 객체비교 - Comparator 인터페이스를 구현함으로써 특정 클래스 타입의 객체들을 비교할 수 있다. - Comparator 인터페이스를 구현하는 클래스는 int compare(T a, T b); 메소드를 재정의해야 한다. 먼저 실행클래스 내부에 Person클래스를 만들어줬다. Person 클래스의 필드는 주민번호 뒷자리, 나이, 키로 구성되어 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public class ComparePersonExample { public static void .. 16_자바에서 객체 복제하기 : 얕은 복제와 깊은 복제 01. 객체 복제란? - 원본 객체의 필드값과 동일한 값을 가지는 새로운 객체를 생성하는 것. - 신뢰하지 않는 영역으로 객체를 넘길 때 객체를 복제해서 넘기면 원본 객체를 안전하게 보호할 수 있다. - 자바에서는 원본 객체가 java.lang.Cloneable 인터페이스를 구현하도록 함으로써 객체복제를 허용할 수 있다. 02. 얕은 복제 (thin clone) - 단순히 필드값을 복사해서 객체를 복제하는 것 - 필드가 기본 타입일 경우 값의 복사가 일어나고, 필드가 참조타입일 경우에는 객체의 번지가 복사 된다. - Object 클래스의 clone() 메소드를 사용하되, 리턴타입이 Object이므로 적절한 타입으로 형변환하여 사용하도록 한다. - clone() 메소드는 CloneNotSupportedEx.. 13_중첩클래스(Nested Class) : 인스턴스 멤버 클래스, 정적 멤버 클래스, 로컬클래스(메소드 내부에 클래스 만들기) 01. 중첩클래스 - 클래스 내부에 선언된 클래스를 중첩클래스(Nested Class)라고 한다. - 중첩클래스로 선언하면 두 클래스 멤버들간의 접근성이 좋아지며 불필요한 관계클래스가 외부에서 보이지 않으므로 코드의 복잡성이 줄어든다. - 여러 클래스와 관계를 맺는 클래스는 독립적으로 선언하는 것이 좋고, 특정 클래스하고만 관계를 맺는 클래스는 중첩클래스로 선언하는 것이 좋다. 02. 중첩클래스의 분류 분류 선언 위치 설명 멤버클래스 인스턴스 멤버 클래스 class A { class B { ... } } A 객체를 생성해야만 사용할 수 있는 B 중첩 클래스 정적 멤버 클래스 class A { static class B {...} } A클래스로 바로 접근할 수 있는 B 중첩 클래스 로컬클래스 class A.. 12_인터페이스(interface) : 인터페이스의 구성, 다중인터페이스 01. 인터페이스란 - 객체의 사용 방법을 정의한 타입 - class 키워드 대신 interface 키워드가 붙으며, 인터페이스를 구현하는 클래스는 implements 키워드를 사용함 - 개발코드와 객체가 서로 통신하는 접점이다. : 개발코드가 인터페이스의 메소드 호출 >> 인터페이스가 객체의 메소드 호출 - 인터페이스가 중간 역할을 해 주기 때문에 개발 코드는 객체의 내부 구조를 알 필요가 없다 --> 개발코드를 수정하지 않고도 사용하는 객체를 변경할 수 있다. 1 2 3 4 5 6 7 8 9 10 interface 인터페이스명 { //상수 타입 상수명 = 값; //추상 메소드 - 무조건 오버라이딩 필요... 번거롭다. 타입 메소드명(매개변수,...); //디폴트 메소드 - 인터페이스에 선언되었으나 구.. 11_상속(inheritance) : 다형성(Polymorphism), 자동형변환(Promotion), 강제형변환(Casting), instanceof 연산자, 추상클래스(abstract class) 01. 다형성 - 같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질. 하나의 타입에 여러 객체를 대입하여 만든다. 02. 자동형변환(Promotion)과 강제형변환(Casting) - 부모 타입에는 모든 자식 객체가 대입될 수 있다. - 부모 타입으로 자동형변환된 자식객체는 강제형변환을 통해 다시 자식 타입으로 바꿀 수 있다. - 인터페이스 타입에는 모든 구현 객체가 대입될 수 있다. 예제) Dog 클래스가 Animal 클래스를 상속함 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public class Animal { //필드 String kind; //생성자 public Animal(String kind) { this.kind = kind; } //메소드 publ.. 이전 1 2 다음