gmsehrh의 등록된 링크

 gmsehrh로 등록된 티스토리 포스트 수는 33건입니다.

(JQuery)DOM탐색 메서드 연습문제 [내부링크]

JQuery attr,nth-child(),addClass, 1.중첩된 리스트의 두번째 레벨에 있는 모든 li요소에 special클래스를 추가한다. //방법1 $(".clear-after > li > ul > li").attr("class","special"); //방법2 $(".clear-after > li > ul > li").addClass("special"); 2. 테이블의 세번째 열에 있는 모든 셀에 year클래스를 추가한다. $("td:nth-child(3)").attr("class","year");$("tr > td").eq(2).attr("class","year"); 이 경우에는 모든 td를 나열해서 2번째 요소만탐색, 하나만 찾기 때문에 자식마다 모두 탐색을 해야하는데 맞지 않는다. 3...

(JQuery)DOM탐색 메서드 [내부링크]

JQuery DOM탐색 메서드 필터 탐색 eq(): 선택한 엘리먼트들 중에 인덱스로 탐색 slice() : 선택한 element중에 인덱스 범위로 탐색 first() : 선택한 element 중에 첫번쨰 요소 탐색 last() : 선택한 element 중에 마지막 요소 탐색 트리 탐색 find() : 선택한 element들의 자손들 중에 탐색 children() : 선택한 element의 자식요소를 탐색 parent()/parents() : 선택한 element의 부모요소를 탐색 prev(),prevAll()/next(),nextAll() : 선택한 element앞/뒤에 오는 형제요소 탐색 siblings(): 선택한 element의 형제요소 모두 선택 필터 탐색 1. eq() 선택한 element 중에..

(JQuery)셀렉터 표현식 [내부링크]

JQuery 셀렉터 표현식 id,class,n번째,자식요소, 하위요소,첫번째 자식,마지막 자식,속성 HTML 1.simple[현재요소의 배경색:#ff0] 2.jQuery[현재요소의 폰트색:#f00] 3.basic[현재요소의 폰트크기:30pt] 4.example[현재요소의 폰트스타일: 이텔릭] 5.div요소의 개수출력하기 6.아래 목록들중 div태그에 포함되어 있는 em요소만 배경색을 blue로 설정하시오 7.아래 목록들중 span의 자식요소인 em만 폰트색을 red로 설정하시오. hello jQuery Good Bye! javascript 8.아래 p태그들중에 첫번째요소에 배경색을 yellow로 설정하세요 9.아래 p태그들중에 마지막요소에 배경색을 red로 설정하세요 10.아래 p태그들중에 title속성..

(JavaScript)DOM -appendChild,insertBefore [내부링크]

DOM 실습 코드 HTML 태그 추가하기 appendChild()실행 insertBefore()실행 appendChild()활용 요소이동 부모태그 태그 이동할 요소박스 1. appendChild(node객체) 자식요소들 중에 마지막 위치에 추가 appendChild("\ text\") 불가 var p=document.getElementById("p"); var p=document.createElement("p"); div.appendChild(p); appendChild()실행 버튼 클릭시 txt도 바로 넣어주기 보다는 수정을 위해 따로 변수에 담아둔다 2.insertBefore(새로운 node, 기존 node) 특정 엘리먼트 앞에 추가 function addBefore(){ var fieldset=do..

(JavaScript)DOM탐색 속성 [내부링크]

DOM탐색 어떠한 태그의 상위,하위 태그 사용시 태그간의 관계를 가지고 선택하는 경우 페이지의 크기가 작을 경우 직접적으로 원하는 태그를 선택하지만 커질수록 간접적으로 관계를 가지고 태그를 선택하는 경우가 효율적 객체의 종류 document : 문서에 접근할 때 (문서객체) Element : tag, 요소 등 (태그객체) ->객체생성 (getElement...()이용): 인스턴스화인스턴스 -메모리에 올라가있는 것 var doc =document.getElementByID() doc.title , doc,class, doc.onclick Attribute : 속성 id, class, title, style .. (속성개체) Text : 태그 안의 내용 (텍스트객체) Node : html을 구성하는 모든 요..

(JavaScript)window객체-open,close [내부링크]

window객체 브라우저 안의 모든 요소가 소속된 객체, 최상위이기 때문에 어디서든 접근 가능 브라우저 창을 제어하는 다양한 메서드 제공 open HTML HTML 팝업창 띄우기 팝업창 JavaScript pop ,close 부모창에 있는 것을 자식 창에서 가지고 오고 싶을 때 부모를 가리키는 속성 -> opener : open()를 이용해서 페이지를 열어준 부모페이지를 나타낸다 HTML 팝업창 닫기 JavaScript 기타 참고 onload 페이지 로딩될 때 이벤트 window.onload=()=>{ } onChange select태그와 같이 다른 것을 선택할 때 이벤트 처리를 할 수 있는 메서드 onclick과 같이 마우스 이벤트 처리 onBlur DOM탐색시 클릭했을 때 기능 정의 onclick (..

(JavaScript)로또 [내부링크]

로또 HTML HTML 로또번호 생성하기 로또 번호 : 보너스 번호 : 생성 JavaScript 1.랜덤함수 function makeBall(){ return Math.floor(Math.random()*45+1); }2.중복제거 function lottoBalls(){ //랜덤담을 배열 생성 var balls=new Array(); var count=0; while(count

(HTML)HTML이란? [내부링크]

HTML 웹페이지를 만들기 위한 언어로 웹브라우저 위에서 동작하는 언어 동작원리 웹 브라우저가 html을 정해진 형태로 변환하여 보여준다 서버문서는 서버가 반드시 필요하며, jsp/servlet을 실행해서 html로 변환해주는 컨테이너 필요 사용자가 browser에서 요청(request)하면 서버는 html로 만든 문서를 사용자에게 응답(response)을 준다 마크업 vs 마크다운 마크업 언어(Markup Language) 문서가 화면에 표시되는 형식을 나타내거나 데이터의 논리적인 구조를 명시하기 위한 규칙들을 정의한 언어의 일종이다. 데이터를 기술한 언어라는 점에서 프로그래밍 언어와는 차이가 있다. 마크다운 언어 마크업 언어의 일종으로, HTML 문서 등과 달리, 읽기도 쓰기도 쉬운 문서 양식 HTM..

(C++)조합 [내부링크]

조합 순열과 다르게 순서는 상관없이 주어진 n개 중에서 r개을 뽑아서 나열하는 것 for문 최대 3개까지 뽑는경우에는 효율적이나 그 이상일 경우 재귀함수를 통해 구현하는 것이 효율적 #include #include using namespace std; vector v; int n = 5; int main() { for (int i = 0; i < n; i++) { v.push_back(i + 1); } //5개중 3개를 뽑는 경우 for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { for (int k = j + 1; k < n; k++) { cout

(C++)순열 [내부링크]

순열 서로 다른 n개의 요소에서 r개를 뽑아 순서가 있도록 하나의 배열로 만드는 것 next_permutation 보통 do~while문과 함께 사용하며 순열의 형태로 순서를 바꾸는next_permutation함수는 while문에 들어간다. do { //로직 } while (next_permutation(first, last, pred));next_permutation의 매개 변수는 3개가 있으며 first는 순열함 범위의 첫 번째 요소 위치의 주소 last는 순열할 범위의 마지막 요소 하나 다음위치의 주소 순서에 따라 연속적인 요소에 대해 충족돌 비교 조건 정의 next permutation사용시 주의사항 visualstudio 공식문서의 next_permutation을 보면 원래 순서가 사전적으로 다..

(C++)배열의 최댓값,최솟값-max_element,min_element [내부링크]

배열 최댓값, 최솟값 구하기 max_element,min_element *max_element(시작주소,끝주소) *min_element(시작주소,끝주소)헤더 #includevector(1차원) using namespace std; const int sz = 10; vector v; int main() { for (int i = 0; i < sz; i++) { v.push_back(i); } int max_n = *max_element(v.begin(), v.end()); int min_n = *min_element(v.begin(), v.end()); cout

(MariaDB)SQL프로그래밍 [내부링크]

SQL프로그래밍 연습문제 1.EMP Table을 복사해서 EMPTEST이름으로 테이블을 생성하고 500 건의 테스트 데이터를 추가하는 procedure를 생성하여 추가하시오. DROP TABLE if exits emptest; CREATE TABLE emptest(SELECT * FROM emp); delimiter $$ CREATE PROCEDURE addProc() BEGIN DECLARE i INT ; SET i=1; while(i (SELECT AVG(sal) FROM emptest); END $$ delimiter ; 4.사원(EMPTEST)테이블에서 전체 사원을 대상으로 COMM 컬럼에 100 을 더하고 직업(JOB)이 ‘CLERK’ 인 사원은 현 급여에서 2배, ‘MANAGER’ 인 직업을 ..

(C++)배열 초기화-memset,fill [내부링크]

fill() & memset() fill() 배열을 0 이외의 값으로 초기화 시 사용 배열fill(초기화 시키고 싶은 시작주소, 끝주소, 초기화 값)헤더 #include vector 벡터는 맨처음 초기화 하지 않고 실행시 오류가 뜬다. 왜냐하면 동적배열이기 때문에 초반에 어떤 크기인지 알 수 없기 떄문이다. 따라서 문제에서 주어진 값을 먼저 넣고 초기화 할 때 사용하는 것이 좋음1차원 using namespace std; const int max_n =8; vector v; int main() { //1차원 벡터 for (int i = 0; i < max_n; i++) { v.push_back(i); } for (auto ele : v) { cout

(MariaDB)조인 [내부링크]

조인 두 개 이상의 테이블을 서로 묶어서 하나의 결과 집합으로 만드는 것 조인은 기본키와 외래키사이의 공통적인 데이터를 기준으로 묶는다 테이블 2개 INNER JOIN(내부조인) 내부 조인은 둘 이상의 테이블에 존재하는 공통 속성의 값이 같은 것을 결과로 추출 1. SELECT username,addr, u.userid,b.userid,prodname,price,amount FROM usertbl u JOIN buytbl b ON u.userID=b.userid; 2. SELECT username,addr, u.userid,b.userid,prodname,price,amount FROM usertbl u INNER JOIN buytbl b ON u.userID=b.userid; 3. SELECT user..

(MariaDB)SQL기본 2-GROUP BY, HAVING [내부링크]

SELECT문 GROUP BY 데이터들을 집계 함수를 통해 컬럼의 그룹별로 추출 예시 SUM 개수 합치기 사용자별 구매 총 수량 SELECT userID, amount FROM buytbl ORDER BY userid; SELECT userID,SUM(amount) FROM buytbl GROUP BY userID ORDER BY userid; 사용자별 총 구매액 SELECT userid, SUM(price *amount) AS '총 구매액' FROM buytbl GROUP BY userid ORDER BY userid; COUNT 행의 개수 제품별 각각의 총 수량 SELECT prodName,COUNT(prodname) FROM buytbl GROUP BY prodname; AVG 평균 SELECT u..

(MariaDB)SQL기본 [내부링크]

SQL 데이터베이스 확인 SHOW DATABASES; 사용할 데이터베이스 지정 USE 데이터베이스; 테이블 확인 SHOW TABLES; 더 자세히 조회 SHOW TABLE STATUS; 테이블의 컬럼정보 조회 DESCRIBE 테이블; 혹은 DESC 테이블; USE구문 사용할 데이터베이스 지정 USE 데이터베이스 이름; SELECT문 select문 작성할 때 from -> where -> select 작동 SELECT 컬럼명 AS 새로운 컬럼명 FROM 테이블 WHERE 조건 위의 코드를보면 새로운 컬럼명으로 조건을 검색하면 오류가 발생한다. 왜냐하면 from -> where -> select순으로 작동하기 때문에 where에서 새로운 컬럼명을 인식하지 못하기 때문이다. 작은 따옴표 큰따옴표 구분 없음 S..

(MariaDB)데이터베이스 [내부링크]

데이터베이스 데이터의 집합 여러명의 사용자, 공유 동시접근 가능 데이터베이스를 관리/ 운영 DBMS(Database Management System) 대량의 데이터를 보다 효율적으로 관리, 운영하기 위해 사용 데이터베이스를 잘 관리/운영하기위한 시스템 또는 소프트웨어 SQL(Structured Query Language) DBMS에 데이터를 구축하고 관리,활용하기 위해 사용되는 언어 DBMS를 통해 중요한 정보들을 입력하고 관리,추출 Excel의 경우 대용량관리를 하지않고 여러명의 사용자가 공유하지 않으므로 DBMS아님 특징 오류가 없는 무결성 : 어떤경로로 들어 왔을 때 데이터에 오류가 없어야함 데이터의 독립성 : 저장소를 변경하더라도 전혀 영향 받지 않아야 함 제약 조건 반드시 있어야 하는 데이터 중..

(JAVA)예외 처리 [내부링크]

예외 처리 예외가 발생할 것을 대비하여 코드상에서 제어하도록 하는 것 에러(Error) 코드 상에서 프로그램 자체적으로 처리할 수 없는 오류 시스템이 종료되어야 할 상황 예외(Exception) Exception은 클래스로 볼 수 있음 (상속받은 다양한 Exception들이 있다) 프로그램 자체적으로 처리할 수 있는 오류 프로그램 실행 중에 발생하는 예외 ex) 0으로 나눌 때, 배열의 범위를 벗어나는 인덱스를 사용할 때 이러한 예외들은 미리 수정할 수 없기 때문에 프로그램 내에서 미리 예외 처리 java.io, java.net , java.sql의 패키지를 사용하려면 무조건 예외처리 필요 CheckedException 컴파일시에 예외 발생하고 반드시 예외 처리를 해야함(try catch or throw..

(JAVA)Getter와 Setter [내부링크]

객체지향프로그래밍에서 객체들의 데이터(멤버변수)를 외부에서 직접적으로 접근하는 것을 방지하기 위해서 Getter와 Setter를 사용하여 접근하는 방법을 사용한다 또한, 외부에서 메소드를 거쳐서 데이터를 변경(Setter)하고 데이터를 읽는 방법(Getter)을 사용하는 것이 좋다. 메소드를 통해서 데이터에 접근하는 것이 좋은 이유는 메소드는 매개변수의 값을 유효한 값만 저장하기 때문에 객체의 무결성을 보장할 수 있기 때문이다. Getter private 접근제한자로 필드를 만들고 필드의 값을 숨긴 채 내부의 값을 꺼낼 때 Setter private 접근제한자로 필드를 만들고 전달 받은 값을 내부에서 변경해 필드에 넣을 때 코드 public class GetSet { //외부에서 접근할 수 없도록 접근제..

(JAVA)인터페이스 [내부링크]

인터페이스(Interface) implements 추상클래스 - 미완성된 요소를 포함, 상속강요 인터페이스 - 모든 메서드가 추상 메서드로만 이루어짐(구현이 안된것들로만 구성), 구현강요 인터페이스 내에서 기능은 미구현(ex) void show(); -> public abstract void show(); 값은 상수로 (ex) int a=1 -> public final static int a= 1; 위와 같이 두 방법으로 코드를 작성해도 오류가 나지 않고 각각 두번째의 코드로 인식을 한다. new 예약어로 객체 생성 불가 private 접근제한자 사용 불가 , public 혹은 protected사용 body ({ })를 붙이지 않는다 인터페이스의 추상메서드를 구현하지 않으면, 자식클래스는 추상 클래스가 ..

(JAVA)추상 클래스 [내부링크]

추상클래스(abstract) 완전하지 않은 클래스 지금 구현하지 않고 상속 클래스에서 확장하기 위한 클래스 추상클래스를 상속받으려면 추상클래스에 구현된 추상메서드를 반드시 구현해야 한다 추상메서드를 하나이상 가진 클래스 new 예약어를 사용해서 객체생성을 할 수 없다. 추상클래스 내에서 추상메서드 외에 다른 메서드를 사용하기 위해서는 자식클래스에서 추상클래스를 상속받고 추상메서드를 반드시 오버라이드 해야한다. 상속강요와 객체생성을 금지하기 위해 abstract class를 선언하기도 한다. 코드가 작성되는 body가 필요없고 abstract를 붙인 메서드명을 선언해주면 사용이 가능하다. 구조 코드 //부모클래스 public abstract class Computer { public abstract voi..

(JAVA)상속-super, this [내부링크]

상속 부모클래스에서 정의한 속성과 메소드를 자식클래스에서 그대로 사용하는 것 this 현재 클래스의 멤버변수를 지정할 때 사용 현재 클래스의 생성자, 멤버필드 초기화 현재의 클래스에서 외부로부터 변수의 이름이 같은 파라미터를 받을 경우에 현재 클래스의 멤버와 외부로부터 들어온 변수를 구분하기 위해서 this를 사용 super 하위클래스(자식)에서 상속받은 상위클래스(부모)의 멤버변수를 참조할 때 사용 부모의 생성자, 부모 멤버필드 초기화 코드 //부모클래스 public class Parent { public int num1; public int num2; public Parent() { this.num1 = 1; this.num2 = 2; } public Parent(int num1, int num2) ..

(JAVA)객체 지향 프로그래밍(OOP) [내부링크]

OOP(Object Oriented Programming) 객체 지향 프로그래밍 좋은 설계 : 낮은 결합도 -> 연관성이있도록 설계하게 될 경우 하나를 바꾸면 연쇄적으로 다 바꿔야 하는 경우가 생길 수 있다. 3대 개념 1. 은닉화(Encapsulation) 데이터의 보호 목적 접근제한자(private)로 속성들을 만들어 클래스 밖에서 접근하여 변경하지 못하게 함 메서드를 통해서만 멤버필드에 접근가능 은닉화 예시(싱글톤 패턴) public class Singleton { private static Singleton singleton; //멤버필드 private로 접근제한 private Singleton() { } //객체가 생성 되었는지 확인해서 new를 제한하는 메서드 //getSingleton 메서드..

(JAVA)로또 [내부링크]

로또 1에서 45까지의 수 중에서 6개를 랜덤으로 중복없이 뽑아서 배열에 담는 프로그램 public void Lotto() { //크기 6의 배열객체 생성 int [] lots=new int[6]; for(int i=0;i

(JAVA)배열 [내부링크]

배열 같은 타입의 값을 나열한 것 -> 인덱스의 개념이 필요 참조타입(mutable) : 주소값으로 변경 new사용하지 않아도 객체로 생성 기본타입 배열 선언방법 3가지 1. int[ ] a={1,2,3}; 2. int[ ] b=new int[] {1,2,3}; 3. int[ ] c=new int[3]; 1,2번은 선언 후 초기화 3번은 int형의 3의 크기를 가진 배열이고 값을 초기화하지는 않음 초기화 하지 않을 시 0으로 초기화 (int : 0 , boolean : false, char : \u0000) 참조타입의 경우 null로 초기화 예시 1번과 같은 기본타입 배열은 heap영역에 배열크기만큼 영역을 가지고 기본타입에 맞게 초기화 2차원 배열 int [행] [열] 로 생각하면 이해하기 편함 1. ..

(JAVA)String 메서드(문자열 자르기) [내부링크]

문자열 자르기 Substring 문자열.substring(from,to)의 형태로 인덱스를 기준으로 from~(to-1)까지의 범위 String s="a,b,c,,d"; String subS=s.substring(2,6); System.out.println(subS); //b,c, StringTokenizer 문자열을 일정한 Token으로 잘라서 배열로 저장 클래스로 생성을 해서 메서드를 사용 String s="a,b,c,,d"; StringTokenizer st=new StringTokenizer(s,","); while(st.hasMoreElements()) { System.out.println(st.nextToken()); } a b c d 문자열 s를 보면 c와 d사이에는 ","안에 아무것도 없다..

(JAVA)클래스 관련 용어 [내부링크]

클래스 클래스 자바에서 패키지안에 들어있는 하나의 파일 틀,설계도 클래스라는 덩어리로 메모리의 heap영역에 할당 인스턴스 변수 클래스 영역에서 선언하고 인스턴스가 생성될 때 메모리에 할당 클래스 변수 클래스 영역에서 선언하고 클래스가 메모리에 올라갈 때(객체를 생성할 때) 메모리에 할당 멤버필드 인스턴스 변수와 클래스 전역 변수와 같은 것들을 멤버 필드라고 한다 메서드 public static void method (String str){ //메서드 호출시 수행될 코드 } 반복적으로 수행해야 하는 기능을 하나의 메서드로 정의 할 수 있다 클래스 내에 정의 해야한다 메서드내에 또 다른 메서드를 정의 할 수 없다 지역변수 메서드와 같이 중괄호안에 있는 한 지역 내에서 사용 할 수 있는 변수 main함수 내..

(JAVA)String 비교 [내부링크]

String 비교 ( == , equals) == (주소를 비교) equals (해시코드로 비교) 문자열이 같으면 해시코드가 같고 주소값은 다르다 리터럴 String pool에 생성 //리터럴과 리터럴 String s1="java"; String s2="java"; System.out.println(s1==s2);//true System.out.println(s1.equals(s2));//true 객체 String pool이 아닌 heap에 생성 //객체와 객체 String obj1=new String("c++"); String obj2=new String("c++"); System.out.println(obj1==obj2);//false System.out.println(obj1.equals(obj2)..

(JAVA)final 예약어 [내부링크]

final 더 이상 수정할 수 없다는 뜻(금지의 의미) 클래스, 메소드 , 멤버필드 별로 제한 조건이 다르기 때문에 예시로 알아 보자. 1. 멤버필드 변수 a를 int형 final로 초기화 했을 때 값을 더이상 변경할 수 없다 2. 메소드 오버라이딩 상속관계에 있는 부모 클래스에서 이미 정의된 메소드를 자식클래스에서 같은 메소드명을 갖는 메소드로 다시 정의하는 것 StaticTest 라는 자식클래스가 SuperClass라는 부모클래스를 상속받도록 한다 위의 그림와 같이 자식클래스의 Method메서드에서 오류가 뜨는 것을 볼 수 있다 3. 클래스 StaticTest 라는 자식클래스가 SuperClass라는 부모클래스를 상속받도록 한다 위의 그림와 같이 SuperClass에 final을 붙였기 때문에 Sta..

(C++)문자열 관련 함수(substr,find,atoi,to_string,size,getline..) [내부링크]

문자열을 다룰 때 사용하는 함수 substr(from,to); string s = "Christino Ronaldo"; string s1=s.substr(0,5);//Chris string s2 = s.substr(3);//istino Ronaldo string s3 = s.substr();// Christino Ronaldofrom : 문자열의 시작인덱스 to : 문자열의 마지막인덱스 find() string s = "Christino Ronaldo"; int a=s.find("tino"); cout

(C++)vector(동적배열) 정리 및 사용법 [내부링크]

vector (동적배열) 정적배열과 같은 방법으로 사용할 수 있으며 다양한 함수를 이용해서 삽입,삭제 등 편리하게 이용할 수 있는 c++ 컨테이너 동적배열이기 때문에 배열에 들어갈 요소의 개수를 모를 때 사용 헤더 #include 선언 vector 변수명; push_back(); vector v; for (int i = 1; i

(JAVA)아스키코드와 유니코드 [내부링크]

컴퓨터 언어(비트와 바이트) 우리가 프로그래밍을 할 때 사용하는 언어는 컴퓨터와 직접적으로 소통을 하는 것 같아보이지만 아니다. 프로그래밍마다 컴파일하는 과정이 모두 다르고 내부적으로 그 과정을 거쳐야 컴퓨터의 정보을 우리가 읽을 수 있는 것이다. 컴퓨터는 이러한 정보를 0과 1 두가지로 표현을 하게 되는데 이 데이터들의 최소단위를 비트라고 부른다. 하지만 사람들이 사용하는 문자를 표현하기에 이 단위는 너무 작아서 바이트라는 단위를 사용하게 된다. 우리는 1바이트=8비트라는 약속을 통해 0과1 두가지로 표현할 수 있는 비트를 8개의 공간을 만들어 256가지로 표현할 수 있다. 또한 비트들의 조합을 통해 우리는 컴퓨터로 'a'나 '가'와 같은 문자를 표현 할 수 있다. 아스키코드 우리가 사용하는 알파벳은 ..

(JAVA)public static void main(String[] args)란? [내부링크]

자바를 공부하면서 main메서드의 String[ ] args가 어떤 의미인지 문득 궁금해졌다. 일반적으로 메서드를 만들면서 main 메서드에서 (String [] args)는 매개변수를 받는 공간인데 자바 내부에서 컴파일 할 때 꼭 필요한 부분일까? String [] args를 없애고 실행하면 아래와 같은 오류가 뜬다. 메인메서드를 public static void main(String[] args)로 하거나 JavaFX클래스를 확장하라고 한다. (참고로 JavaFX는 데스크톱이나 임베디드에서 실행하는 UI 어플리케이션을 개발할 수 있도록 UI를 제공하는 도구이다) JavaFX는 넘어가고 public static void main(String[] args)를 하나씩 보자 public 자바에서 접근제한자 ..