//Google AdSense
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

+ Recent posts