package kr.or.ksmart;
class Member{
//인스턴스변수, 멤버필드
private String memberName;
//생성자메서드
public Member(String memberName) {
this.memberName = memberName;
};
//메서드
public String getMemberName () {
return memberName;
};
}
class User{
//생성자메서드를 접근지정자 private으로 선언 시 외부에서 객체화 불가능
private User() {
};
public static User getInstance() {
return new User();
};
}
public class JavaEx01 {
public static void main(String[] args) {
/*
* 복습1. Member라는 클래스를 생성할 것이다.
* 이 Member라는 클래스는 인스턴스화 할 때 매개변수 1개를 받아야만 인스턴스화가 가능하다.
* 또한 Member 클래스는 인스턴스변수 memberName 그리고 getMemberName이라는 메서드를 가지게 된다.
* 위의 조건대로 클래스를 생성하고 선언과 호출을 하도록 하여라.
* (인스턴스화 할 때 들어간 인수값은 인스턴스변수에 저장된다.)
*/
Member member = new Member("김최첨단");
System.out.println(member.getMemberName());
/*
* 복습2. User클래스를 생성할 것이다.
* 이 User클래스는 new 연산자를 통하여 인스턴스화 할 수 없으며, getInstance라는 메서드를 통해서 인스턴스화 가능하다.
* 이 클래스를 선언하고 인스턴스화를 시키도록 하여라.
*/
User user = User.getInstance();
System.out.println(user+"<<-user");
/*
* 복습3. 래퍼클래스가 무엇인지 서술하시오.
*
* 기본형 타입의 데이터를 객체로 취급하기 위해 사용하는 클래스.
* 클래스변수와 클래스메서드 위주로 다
*/
/*
* 복습4. 인스턴스변수와 클래스변수 차이점을 서술하시오.
* 인스턴스변수 : 인스턴스화 되어야 접근 가능한 변수
* 클래스변수 : 인스턴스화 하지 않아도 접근 가능한 변수
*
* 인스턴스변수는 클래스가 인스턴스화 될 때마다 함께 새로이 인스턴스화 되는 변수이고
* 클래스변수는 정적으로 선언되어있어, 한 번 인스턴스화된 주소값을 변동없이 가리키는 변수이다.
*/
/*
* 복습5. class로 변환된(바이트 코드) 파일을 실행시키거나, java 프로그래밍의 메모리를 관리하는 프로그램의 명칭이 무엇인가요?
*
* Java Virtual Machine
*/
}
}
package kr.or.ksmart;
class MemberSuper{
public String getMemberName() {
return null;
}
public final int getMemberAge() {
return 0;
}
public void setMemberAddr(String addr1) {
}
public void setMemberAddr(String addr1, String addr2) {
}
}
class MemberSub extends MemberSuper {
@Override
public String getMemberName() {
return null;
}
/*public int getMemberAge() {
return 0;
}*/
}
public class JavaEx02 {
public static void main(String[] args) {
/*
* 복습6. MemberSuper클래스와 MemberSub클래스가 있다.
* MemberSub는 MemberSuper의 멤버를 가지고 있다.
* 위의 설명에 맞는 클래스를 선언하고 호출하도록 하여라.
*/
/*
* 복습7. 복습6의 클래스의 관계에서 추가적인 메서드를 생성할 것이다.
* MemberSuper 클래스에 getMemberName과 getMemberAge라는 메서드가 있다.
* MemberSub 클래스에서 getMemberName 오버라이딩은 가능하나, getMemberAge는 오버라이딩이 불가능하다.
* 위의 설명에 알맞게 메서드를 작성하여라.
*/
/*
* 복습8. 복습6의 클래스의 관계에서 추가적인 메서드를 생성할 것이다.
* setMemberAddr 메서드가 1개의 매개변수를 받을 수도 있고
* setMemberAddr 메서드가 2개의 매개변수를 받을 수도 있다.
* 메서드를 알맞게 작성하여라. >>메서드오버로딩
*/
}
}
package kr.or.ksmart;
interface In1{
public int in1();
}
interface In2{
public int in2();
}
class InIm implements In1, In2 {
@Override
public int in2() {
return 0;
}
@Override
public int in1() {
return 0;
}
}
public class JavaEx03 {
public static void main(String[] args) {
/*
* 복습9. 인터페이스 2개를 상속받은 클래스를 생성할 것이다.
* 인터페이스의 명은 In1, In2 이며
* int 형을 리턴하는 In1 인터페이스의 in1 메서드, In2 인터페이스의 in2 메서드를 가지고 있다.
* InIm으로 클래스를 생성하고 2개의 인터페이스를 상속받아 객체화할 수 있도록 만들어라.
* 또한 InIm를 객체화하고 In1, In2를 업캐스팅 하도록 하여라
*/
InIm inIm = new InIm();
In1 in1 = inIm;
In2 in2 = inIm;
/*
* 복습10. 객체지향의 4대 원칙을 서술하시오.
* 캡슐화, 추상화, 상속, 다형성
*/
/*
* 복습11. 객체지향 설계의 5대 원칙을 서술하시오.
* SOLID
* 1. SRP(단일 책임 원칙) - 소프트웨어의 설계 부품(클래스, 함수 등)은 단 하나의 책임만을 가져야 한다.
* 2. OCP(개방-폐쇄 원칙) - 기존의 코드를 변경하지 않고(Closed) 기능을 수정하거나 추가할 수 있도록(Open) 설계해야 한다. > getter, setter
* 3. LSP(리스코프 치환 원칙) - 자식 클래스는 부모클래스에서 가능한 행위를 수행할 수 있어야 한다. > 업캐스팅과 관련
* 4. ISP(인터페이스 분리 원칙) - 한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다. 하나의 일반적인 인터페이스 보다 여러 개의 구체적인 인터페이스가 낫다.
* 5. DIP(의존 역전 원칙) - 의존 관계를 맺을 때, 변화하기 쉬운 것 보다 변화하기 어려운 것에 의존해야 한다는 원칙이다.
*/
}
}
'JAVA' 카테고리의 다른 글
[Jsoup] 스크랩핑 해보께 (0) | 2021.05.03 |
---|---|
JUnit Mockito Framework (0) | 2021.04.27 |
[JAVA Basic] Generic (1) | 2020.05.22 |
[JAVA Basic] Singleton Pattern (0) | 2020.05.20 |