Cloud 기반 웹 DevOps 프로젝트 개발자 과정

문이빈·2023년 6월 22일
0
post-thumbnail

Java

생성자

  • 생성자는 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'이다.
  • this는 참조변수로 인스턴스 자신을 가리킨다.
  • this.는 객체 자신을 가리키는 참조변수이다.
package ex7;

public class Employee {
int empno;
String ename;
String job;
int cont; // 정규직1 계약직2
String salType; //호봉제, 연봉제, 계약제

public Employee() {	
}

public Employee(int empno, String ename, String job) {
	this.empno = empno;
	this.ename = ename;
	this.job = job;
}
public Employee(int empno, String ename, String job, int cont) {
	this(empno, ename, job); // 내부 다른 생성자 호출
	this.cont=cont;
}
public Employee(int empno, String ename, String job, int cont, String salType) {
	this(empno, ename, job, cont); // 내부 다른 생성자 호출
	this.salType=salType;
	}
}

and

  • this( ) 는 같은 클래스의 멤버들 간에 서로 호출할 수 있는 것 처럼 생성자 간에도 서로 호출이 가능하다.
  • 동일한 클래스 내의 서로 다른 생성자에서 오버로딩된 또 다른 생성자 하나를 호출하는대 사용됨
package ex7;

public class Chain {
Chain(){
	this(10);
	System.out.println("기본 생성자 Chain() 호출");
}
Chain(int x){
	this(5,6);
	System.out.println("일반 생성자 Chain(int x)호출");
	System.out.println("x의 값 :"+ x);
}
Chain(int x, int y){
	System.out.println("일반 생성자 Chain(int x, int y)호출");
	System.out.println("x와 y값 : "+x+" "+y);
	}
}

위 두 생성자를 사용하여 실행 시켜보자

  • toString은 객체의 정보를 String(문자열)형으로 형변환 해준다
package ex7;

public class ExampleChain {

public static void main(String[] args) {
	Employee e = new Employee(12341243, "홍길순", "매장직원", 2);
	System.out.println("직원 명: "+ e.ename);
	System.out.println("계약 여부: "+ e.cont);
	
	Chain c = new Chain(7);
	System.out.println(c.toString());
	
	MemberChain m = new MemberChain();
	System.out.println(m.toString());
	}
}

😥


package ex7;

public class MemberChain {
String firstName;
String country;
int age;

public MemberChain() {
	this("홍길순");
}
public MemberChain(String mName) {
	this(mName, 20);
}
public MemberChain(String mName, int mAge) {
	this(mName, mAge, "대한민국");
}
public MemberChain(String mName, int mAge, String mCountry) {
	firstName = mName;
	age = mAge;
	country = mCountry;
}
void prinInfo() {
	System.out.println("이름 : " + firstName);
	System.out.println("국적 : " + country);
	System.out.println("나이 : " + age);
	}
}	

※ 오버로딩(overloading)은 새로운 메소드를 정의하는 것입니다.
※ 하지만 오버라이딩(overriding)은 상속받은 기존의 메소드를 재정의하는 것입니다.

public String toString() { 
//object 클래스의 toString()을 오버라이딩 했음.(확인 하기 편함)

return firstName +"::"+ country +"::"+ age;

위 생성자를 실행

package ex7;

public class Constructor04 {

public static void main(String[] args) {
	MemberChain object = new MemberChain();
		object.prinInfo();
	}
}


접근제한자

출처:https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992ADD435C24B1352A

public 접근제한자

출처:https://www.google.com/url?sa=i&url=https%3A%2F%2Fvelog.io%2F%40damiano1027%2FJava-Java-%25EC%25A0%2591%25EA%25B7%25BC%25EC%25A0%259C%25EC%2596%25B4%25EC%259E%2590&psig=AOvVaw0MPAjsajQhPFvBolklEY-n&ust=1687485924595000&source=images&cd=vfe&ved=0CBEQjRxqFwoTCPjK0Irl1f8CFQAAAAAdAAAAABAO

  • 제한자 종류
    i) public : 모든 접근을 허용
    ii) protected : 같은 패키지(폴더)에 있는 객체와 상속관계의 객체들만 허용
    iii) default : 같은 패키지(폴더)에 있는 객체들만 허용
    iv) private : 현재 객체 내에서만 허용

package ex7;

public class Animal {
protected String name;
String h="안녕";

public String getName() {
	return name;
}
public String getH() {
	return h;
	}
}


package ex7;

public class Use {

public static void main(String[] args) {
	Animal a = new Animal();
	a.name = "이쁜 동물";
	
	System.out.println(a.getName());
	a.h="헬로";
	
	System.out.println(a.h);
	System.out.println(a.getH());		
	}
}

상속관계는 아니지만 패키지가 같아서 가능하다.

package test;

import ex7.Animal;

public class Use {
public static void main(String[] args) {
	
	Animal a = new Animal();
//	a.name = "이쁜 동물"; 		<- 상속관계가 아니라 안됨
	
	System.out.println(a.getName());
//	a.h="헬로"; 					<- 다른 패키지라 안됨
	
//	System.out.println(a.h); 	<- 다른 패키지라 안됨
	System.out.println(a.getH());	
	}
}

하지만 이것은 패키지가 달라서 에러가 난다.😥


public 접근제한자를 이용하여 클래스 멤버 호출하기

  • public 접근 제한은 모든 패키지에서 아무런 제한 없이 생성자를 호출할 수 있도록 합니다.
package ex7;

public class Dog {
public String breed;
public String color;
protected int age;
private String name;

public void bowwow() {
	System.out.println("멍멍 짖다.");	
	sleep(); 						<- private일때 추가
}

protected void run() {				<- protected일때 추가
	System.out.println("달리다");
}

private void sleep() {				<- private일때 추가
	System.out.println("잠을자다");
}

public String getName() {  			<- private일때 추가
	return name;
}

public void setName(String name) {  <- private일때 추가
	this.name=name;
	}
}

호출하기

package ex7;

public class AccessModifier01 {

public static void main(String[] args) {
	Dog dogObj = new Dog();
	
	dogObj.breed = "포메라니언";
	dogObj.color = "갈색";
	
	System.out.println("강아지 품좀 : " + dogObj.breed);
	System.out.println("강아지 색상 : " + dogObj.color);
	
	dogObj.boewow();
	}
}

protected

  • 패키지에 속하는 클래스에서 생성자를 호출할 수 있도록 합니다.
  • 다른 패키지에 속한 클래스가 해당 클래스의 자식 클래스라면 생성자를 호출할 수 있습니다.
protected void run() {
System.out.println("달리다");

추가함

package ex7;

public class AccessModifier02 {

public static void main(String[] args) {
	Dog obj = new Dog();
	
	obj.breed = "포메라니언";
	obj.color = "갈색";
	
	System.out.println("강아지 품좀 : " + obj.breed);
	System.out.println("강아지 색상 : " + obj.color);
	
	obj.bowwow();
	
	obj.age = 10;
	System.out.println("강아지 나이 : " + obj.age);
	obj.run();
	}
}

dogObj -> obj 으로 변경하며, 나이 추가


private

  • private 접근 제한은 동일한 패키지이건 다른 패키지이건 상관없이 생성자를 호출하지 못하도록 제한합니다.
  • 오로지 클래스 내부에서만 생성자를 호출할 수 있고 객체를 만들 수 있습니다.
    내부에서는 사용이 가능하지만 외부에서 호출은 불가능하다
private String name;

public void bowwow() {
	System.out.println("멍멍 짖다.");	
	sleep();
    
,

public String getName() {
	return name;
}

public void setName(String name) {
	this.name=name;

을 추가함

// obj.name = "다운"; private은 외부에서 사용 불가
obj.setName("다운");
System.out.println("강아지 이름 : " + obj.getName());
// obj.sleep(); private이므로 사용불가

이렇게 바꿔준다면 사용이 가능하다


상속

  • 상속은 다른 클래스 간의 관계를 설정하고 계층적 순서로 정보를 관리하며 코드를 재사용하는 데 도움이 된다.
  • 새로운 클래스를 만들 때, 원하는 코드 중 일부가 포함된 클래스가 이미 있는 경우 기존 클래스에서 새 클래스를 파생(상속)시킬 수 있다.
  • 이렇게 함으로써 기존 클래스의 멤버 변수와 메소드를 재사용할 수 있다.
  • 부모 클래스 = 슈퍼 클래스, 기본 클래스
    -다른 클래스에 멤버 요소(메서드와 변수)를 상속하는 클래스로 상위 클래스
  • 자식 클래스 = 서브 클래스, 파생 클래스
    -다른 클래스의 멤버 요소를 상속받은 클래스로 하위 클래스
    -자식 클래스는 부모 클래스의 모든 멤버 요소를 소유할 뿐만 아니라 그 밖에도 고유한 멤버 메소드와 변수를 추가할 수 있음

부모 클래스에서 자식 클래스로 상속하려면 extends


superclass를 하고자 하는 부모클래스 바꾸면 => 이미 부모클래스가 가지고 있는 것은 다 지게 된다.

parent

package ex8;

public class ParentCat {
public String breed = "샴고양이";
void eat() {
	System.out.println("먹이를 먹다");
	}
}

baby

package ex8;

public class BabyCat extends ParentCat {
	public String color = "초콜릿색";
		void meow() {
			System.out.println("야옹하고 울다.");
	}
}

출력

package ex8;

public class Example01 {

public static void main(String[] args) {
	BabyCat bCat = new BabyCat();
	System.out.println("품종 : " + bCat.breed); // 수퍼클래스의 멤버변수 사용
	System.out.println("색상 : " + bCat.color);
	
	bCat.eat();  // 수퍼클래스의 메소드 사용
	bCat.meow();
	}
}


package ex8;

public class Calculation {
int z;

public void addition(int x, int y) {
	z = x + y;
	System.out.println("두 수의 덧셈 : " + z);
}

public void subtraction(int x, int y) {
	z = x - y;
	System.out.println("두 수의 뺄셈 : " + z);
	}
}

위 Calculation을 상속받아서 Inheritance를 만들었음.

package ex8;

public class Inheritance01 extends Calculation{
public void multiplication (int x, int y) {
	z = x * y;
	System.out.println("두 수의 곱셈 : " + z);
}

public static void main(String[] args) {
	int a = 20, b = 10;
	Inheritance01 obj = new Inheritance01();
	obj.addition(a,b);
	obj.subtraction(a,b);
	obj.multiplication(a,b);
	}
}

이러한 상속 관계를 is-A관계라고 부른다.
다형성 형성를 위해 상속을 만든다.


커뮤니티 사이트의 구조 설계

<link rel="stylesheet" href="css/common.css" type="text/css">

@charset "UTF-8";
*{margin: 0;
  padding: 0;}
  
body{font-family: "맑은 고딕", "돋움";
	 font-size: 12px;
	 color: #444444;}
	 
ul{list-style-type: none;}

.clear{clear: both;}

#wrap{width: 1000px;
	  margin: 0 auto;}
_____________________________________________________________________________
<link rel="stylesheet" href="css/header.css" type="text/css">

@charset "UTF-8";

header{height: 100px;
	   position: relative;}
	   
header #logo{position: absolute;
			 top: 12px;
			 left: 20px;}
			 
header #top_menu{position: absolute;
			 	 top: 10px;
			 	 left: 770px;}
			 	 
header #main_menu{width: 800px;
				  height: 38px;
				  background-image: url("../images/main_menu_bg.png");
				  background-repeat: no-repeat;
				  position: absolute;
				  top: 40px;
				  left: 210px;}
				  
header #main_menu li{display: inline-block;
					 margin: 12px 30px 0 50px;
					 font-size:13px;}
					 
header #main_menu a:link{text-decoration: none;
						 color: #ffffff;}
						 
header #main_menu a:hover{text-decoration: none;
						  color: #ffffff;}
						 
header #main_menu a:visited{text-decoration: none;
						 	color: #ffffff;}
						 	
header #main_menu a:active{text-decoration: none;
						   color: #ffffff;}
@charset "UTF-8";

header{height: 100px;
	   position: relative;}
	   
header #logo{position: absolute;
			 top: 12px;
			 left: 20px;}
			 
header #top_menu{position: absolute;
			 	 top: 10px;
			 	 left: 770px;}
			 	 
header #main_menu{width: 800px;
				  height: 38px;
				  background-image: url("../images/main_menu_bg.png");
				  background-repeat: no-repeat;
				  position: absolute;
				  top: 40px;
				  left: 210px;}
				  
header #main_menu li{display: inline-block;
					 margin: 12px 30px 0 50px;
					 font-size:13px;}
					 
header #main_menu a:link{text-decoration: none;
						 color: #ffffff;}
						 
header #main_menu a:hover{text-decoration: none;
						  color: #ffffff;}
						 
header #main_menu a:visited{text-decoration: none;
						 	color: #ffffff;}
						 	
header #main_menu a:active{text-decoration: none;
						   color: #ffffff;}
_____________________________________________________________________________
<link rel="stylesheet" href="css/main.css" type="text/css">

@charset "UTF-8";
/*왼쪽 콘텐츠*/
aside{
width:190px;
float:left;}
/*로그인*/

aside #login_box{
width: 186px;
height: 120px;
border: solid 1px #dddddd;
border-radius: 10px;
background-color: #f3f3f3;}
				 
aside #login_title{
margin: 10px 0 0 20px;}

aside #login_input{
float: left;
margin: 10px 0 0 10px;}

aside #login_btn{
float: left;
margin: 12px 0 0 5px;}
				 
aside #login_input input{
width: 100px;
height: 20px;
border: solid 1px #dddddd;}
						 
aside #guestBook{
width: 189px;
height: 135px;
margin-top: 15px;
background-color: #eeeeee;
border: solid 1px #cccccc;
border-radius: 10px;
box-shadow: 2px 2px 5px #dddddd;}
				 
aside #guestBook_title{
width: 165px;
padding: 10px 0 0 5px;
margin: 0 0 0 8px;
border-bottom: solid 1px #cccccc;}
					   
aside #guestBook ul{
margin: 10px 0 0 40px;}

aside #guestBook li{
margin-top: 5px;
list-style-image: url("../images/icon_blue.gif");}


/* 오른쪽 메인*/

section#main{
width: 758px;
float: right;}
/*border: solid 1px #ff0000; */
			  
/* 공지사항, 자유 게시판, YOUTUBE를 포함하는 박스 */

section#main #notice_free_youtube{
height: 250px;
position: relative;
margin-top: 10px;}
			   
section#main #notice{
width: 300px;
position: absolute;}

/*최근 게시물 이미지와 목록*/					 
section#main .latest_title{
padding-bottom: 3px;
border-bottom: solid 1px #cccccc;}
						   
section#main .latest_title img.latest_img{
float: left;}

section#main .latest_title img.more{
float: right;}

section#main .latest_title li{
padding: 10px 0 10px 0;}

section#main .latest_content .list div{
float: right;}

section#main .latest_content .list .subject{
width: 170px;}

section#main .latest_content .list .date{
float: right;
margin-right: 10px;}


/*자유 게시판 박스*/
section#main #free{
margin-top: 70px;
width: 300px;
position: absolute;
top: 120px;}
/* border:solid 1px #0000*/

section#main #youtube{
width: 365px;
height: 250px;
position: absolute;
left: 380px;}
/* border:solid 1px #0000*/

section#main #youtube_img{
margin: 10px 0 0 45px;}
_____________________________________________________________________________

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>클래식 기타 커뮤니티</title>
<link rel="stylesheet" href="css/common.css" type="text/css">
<link rel="stylesheet" href="css/header.css" type="text/css">
<link rel="stylesheet" href="css/main.css" type="text/css">
</head>
<body>
	<div id="wrap">
		<header>
			<a href="index.jsp"><img id="logo" alt="로고" src="images/logo.png"></a>
				<nav id="top_menu">
					HOME  |  LOGIN  |  JOIN  |  NOTICE
				</nav>
				<nav id="main_menu">
					<ul>
						<li><a href="free/BoardList.jsp">자유게시판</a></li>
						<li><a>기타연주</a></li>
						<li><a>공동구매</a></li>
						<li><a>연주회 안내</a></li>
						<li><a>회원 게시판</a></li>
					</ul>
				</nav>
		</header>
		
		<aside>
			<article id="login_box">
				<img id="login_title" alt="" src="images/ttl_login.png">
				
				<div id="input_button">
					<ul id="login_input">
						<li><input type="text"></li>
						<li><input type="password"></li>
					</ul>
					<img id="login_button" alt="" src="images/btn_login.gif">
				</div>
				
				<div class="clear"></div>	
				
				<div id="join_search">
					<img src="images/btn_join.gif">
					<img src="images/btn_search.gif">				
				</div>
			</article>
			
			<article id="guestBook">
				<div id="guestBook_title">
					<img alt="" src="images/ttl_memo.gif">
				</div>
					<ul>
						<li>안녕하세요!</li>
						<li>안녕하세요!</li>
						<li>안녕하세요!</li>
						<li>안녕하세요!</li>
					</ul>
			</article>
		</aside>
		<section id="main">
			<img alt="" src="images/main_img.png">
				<section id="notice_free_youtube">
					<article id="notice"> <!-- 공지사항 -->
				
				<div class="latest_title">
					<img class="latest_img" src="images/latest1.gif">
					<img class="more" src="images/more.gif">
						<div class="clear"></div>
				</div>
				
				<div class="latest_content">
					<img class="image" src="images/book_pen.gif">
						<ul class="list">
							<li>
								<div class="subject">루바토 개편과 사이트 이용...</div>
								<div class="date">2023-06-22</div>
								<div class="clear"></div>
							</li>
							
							<li>
								<div class="subject">루바토 개편과 사이트 이용...</div>
								<div class="date">2023-06-22</div>
								<div class="clear"></div>
							</li>
							
							<li>
								<div class="subject">루바토 개편과 사이트 이용...</div>
								<div class="date">2023-06-22</div>
								<div class="clear"></div>
							</li>
							
							<li>
								<div class="subject">루바토 개편과 사이트 이용...</div>
								<div class="date">2023-06-22</div>
								<div class="clear"></div>
							</li>
						</ul>
				</div>
			
			</article><!-- 공지사항 -->
			
			<article id="free"> <!-- 자유게시판 -->
				<div class="latest_title">
					<img class="latest_img" src="images/latest2.gif">
					<img class="more" src="images/more.gif">
					<div class="clear"></div>
				</div>
				<div class="latest_content">
					<img class="images" src="images/book_pen.gif">
						<ul class="list">
							<li>
								<div class="subject">까스통님의 선물인 보드카....</div>
								<div class="date">2023-06-22</div>
								<div class="clear"></div>
							</li>
							
							<li>
								<div class="subject">까스통님의 선물인 보드카....</div>
								<div class="date">2023-06-22</div>
								<div class="clear"></div>
							</li>
							
							<li>
								<div class="subject">까스통님의 선물인 보드카....</div>
								<div class="date">2023-06-22</div>
								<div class="clear"></div>
							</li>
							
							<li>
								<div class="subject">까스통님의 선물인 보드카....</div>
								<div class="date">2023-06-22</div>
								<div class="clear"></div>
							</li>
						</ul>
				</div>
			</article><!-- 자유게시판 -->
	
			<article id="youtube"> <!-- 유튜브 동영상 -->
				<div class="latest_title">
					<img class="latest_img" src="images/latest3.gif">
					<img class="more" src="images/more.gif">
					<div class="clear"></div>
				</div>
					<img id="youtube_img" src="images/bach.jpg">
			</article id="youtube"><!-- 유튜브 동영상 -->
			</section>
		</section><!-- main section -->
	</div>
</body>
</html>

0개의 댓글