728x90

HTML 5


브라우저는 자신이 인식하지 못하는 태그를 만나면 인라인 태그로 취급 (자신만의 영역을 갖지 않는 태그)

하지만 <header>나 <article> 같은 태그들은 자신만의 영역이 있어야 하는 block level 태그로, 영역이 있어야 위치 등을 옮길 수 있다.


* 블록 레벨 요소 : 적용했을 때 새로운 블록이 만들어지는 태그, 해당 태그가 적용된 부분의 앞뒤로 줄바꿈이 생긴다. <p><div>, <ul> 등...

* 인라인 요소 : 적용하더라도 줄 바꿈이 생기지 않는다. <a>, <img>, <br> 등...


웹 문서에서 사용한 시맨틱 태그들은 <style> </style> 사이에 다음과 같은 소스를 추가하여 강제로 블록 레벨 태그로 설정해주어야 한다.


1
2
3
header, section, nav, article, footer {
display:block;
}
cs


시맨틱 태그를 지원하지 않는 브라우저는 다음과 같이 자바 스크립트를 이용해, 웹 문서에서 사용할 시맨틱 태그들을 새로 정의해야 한다.

<head> </head> 태그 사이에 다음 스크립트를 넣어준다.


1
2
3
4
5
6
7
8
<script type="text/javascript">
  document.createElement('article');
  document.createElement('section');
  document.createElement('aside');
  document.createElement('nav');
  document.createElement('header');
  document.createElement('footer');
</script>
cs



HTML5 Shiv


자바스크립트를 이용해 HTML5 태그를 직접 정의해 사용하는 것은 번거롭기 때문에, 이런 과정을 자바스크립트 파일로 제공한다.


https://github.com/aFarkas/html5shiv


위의 페이지로 이동후 src 폴더안의 html5shiv.js 파일을 저장,

<script> 또는 </head> 태그 앞이나 </body> 태그 앞에 다음과 같이 지정한다.

<!--[if lt IE 9]>
	<script src="bower_components/html5shiv/dist/html5shiv.js"></script>
<![endif]-->


Modernizr


HTML 5를 지원하는지 확인 가능한 라이브러리이다.


https://modernizr.com/


위의 사이트에서 최신 버전의 라이브러리를 다운로드 가능하고, 다운로드한 파일을 다음과 같이 페이지에 링크해 사용한다.


1
2
3
<head>
<script src="medernizr.min.js"></script>
</head>
cs


'Web Develop > Web Programming' 카테고리의 다른 글

WebRTC 및 Node 등 스터디  (0) 2022.02.25
Spring Boot시작하기  (0) 2021.08.10
html 기초  (0) 2021.01.07
반응형 웹 만들기  (0) 2017.03.23
윈도우 웹서버 설치 및 HTML 실습기초  (0) 2017.03.09
728x90

참고 강의 : https://wikidocs.net/book/31

 

 

인터페이스

 

인터페이스의 필요성

 

육식 동물에게 먹이를 주는 사육사(ZooKeeper) 클래스가 있다고 하자. 그리고 Animal 클래스를 상속하는 Tiger와 Lion 클래스가 있다.

 

ZooKeeper 클래스의 feed 메소드는 메소드 오버로딩 되어 있다. (입력값이 각각 Tiger, Lion으로 자료형이 다름)

1
2
3
4
5
6
7
8
9
public class ZooKeeper {    
    public void feed(Tiger tiger) {
        System.out.println("feed tiger");
    }
 
    public void feed(Lion lion) {
        System.out.println("feed lion");
    }
}
cs

 

하지만 이 경우, Animal을 상속하는 새로운 동물 클래스가 생길 때 마다, ZooKeeper에도 feed 메소드가 필요하게 된다.

 

이럴때 필요한 것이 바로 "인터페이스"이다.

 

 


 

Predator.java

 

1
2
public interface Predator {
}
cs

육식 동물 인터페이스를 작성했다. class 키워드가 아닌 interface 키워드를 사용해 구현한다.

 

그리고 Tiger와 Lion 클래스는 Animal 클래스를 사용하며, Predator 인터페이스를 구현하도록 한다. 이 때는 implements라는 키워드를 사용한다.

1
2
public class Tiger extends Animal implements Predator {    
}
cs

 

1
2
public class Lion extends Animal implements Predator { 
}
cs

 

이제부터는 어떤 육식 동물이 추가되더라도 다음과 같이 인터페이스를 구현한 클래스를 정의하면 된다.

1
2
public class Crocodile extends Animal implements Predator {
}
cs

 

하지만 아직도 문제는 있다. 

1
2
3
public void feed(Predator predator) {
    System.out.println("feed ???");
}
cs

 

ZooKeeper 클래스가 육식동물(클래스)의 이름(name)에 따라 다른 문자열을 출력해야 할 것이다.

 

이럴 때 인터페이스에 새로운 메소드 추가가 필요하다.

 


 

Predator.java

 

1
2
3
public interface Predator {
    public String getName();
}
cs

위에서 특이한 점은 getName 메소드에 몸통(body)가 없다는 점이다. 보통은 메소드명(입력값) { 몸통 } 으로 정의되어야 할 것인데 말이다.

이것은 인터페이스의 규칙으로 위의 getName이라는 메소드는, 다음과 같이 인터페이스를 implements한 클래스들이 구현해야 한다.

 

1
2
3
4
5
public class Tiger extends Animal implements Predator {
    public String getName() {
        return this.name;
    }
}
cs

 

이제 ZooKeeper 클래스의 feed 메소드를 다음과 같이 정의하면 육식동물의 이름에 따라 다른 문자열을 출력할 것이다.

1
2
3
4
5
public class ZooKeeper {    
    public void feed(Predator predator) {
        System.out.println("feed "+predator.getName());
    }
}
cs

predator.getName()을 호출하면, Predator 인터페이스를 구현한 구현체(Tiger, Lion)의 getName()이 호출된다.

 

 

Tiger와 Lion에 있는 getName 메소드가 중복되어 있으므로, 제거하고 Animal 클래스에 getName 메소드를 구현하도록 한다. 

(육식동물 클래스는 Animal클래스를 상속받으니깐)

이렇게 중복된 메소드를 제거하고, 이동하는 행위를 리팩토링(Refactoring)이라고 한다.

 

메인 메소드도 다음과 같이 정의하고 실행결과를 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class ZooKeeper {    
    public void feed(Predator predator) {
        System.out.println("feed "+predator.getName());
    }
 
    public static void main(String[] args) {
        Tiger tiger = new Tiger();
        tiger.setName("tiger");
 
        Lion lion = new Lion();
        lion.setName("lion");
 
        ZooKeeper zooKeeper = new ZooKeeper();
        zooKeeper.feed(tiger);
        zooKeeper.feed(lion);
    }
}
cs

Output : 

feed tiger

feed lion

 

 

인터페이스의 개념적인 이해

 

컴퓨터의 USB 포트에는 다양한 기기를 연결할 수 있다. 바로 이 USB포트가 물리적 세계의 인터페이스라고 할 수 있다.

USB포트의 규격만 알면 어떤 기기도 만들 수 있고, 컴퓨터는 USB 포트만 제공하고 어떤 기기가 만들어지는 지 신경쓸 필요가 없다. 바로 이 점이 인터페이스의 핵심이다.

 

위에서 만든 사육사(ZooKeeper) 클래스가 호랑이던 사자던 상관하지 않고 먹이를 줄 수 있는것과 같다.

물리적세계 자바세계
컴퓨터 ZooKeeper
USB 포트 Predator
하드디스크, 디지털카메라,... Tiger, Lion, Crocodile,...

※ USB 포트에는 전자기기들이 지켜야만 하는 각종 규칙들이 있다. (인터페이스의 메소드)

'Study > Java' 카테고리의 다른 글

Java Network 프로그래밍 기초  (0) 2017.06.03
NIO 기반 네트워킹  (0) 2017.05.30
JAVA - NIO  (0) 2017.05.29
Java - OOP_클래스와 상속, 생성자, 오버로딩/오버라이딩  (0) 2017.03.17
Java 개발PC 설정 및 기초  (0) 2017.03.16
728x90

SQL Server2014 설치법.pdf


서버 이름

210.119.12.79,1617


로그인

sa


비밀번호

i**7



c# 데이터베이스 관련

SQL 프로그래밍 배우기 : http://www.sqlprogram.com/Default.aspx

C# 데이터 처리 http://www.csharpstudy.com/Data/Data.aspx

C# MongoDB 활용 예제 : http://www.csharpstudy.com/Practical/Prac-mongodb.aspx




성적처리(ms-sql 작성중)


StudentManager.7z



'DB' 카테고리의 다른 글

데이터 베이스 기초  (0) 2017.06.14
SQL injection (SQL 삽입)  (0) 2017.06.01
MySQL 기초 공부  (0) 2017.05.30
MySQL 설치 및 기초  (0) 2017.03.06
SQLD 관련 자료 & 사이트  (0) 2017.03.05
728x90

참고 강의 : https://wikidocs.net/book/31

 

 

클래스

클래스는 객체를 생성하는 기능이 있다.

1
2
3
public class Animal {
 
}
cs

 

객체의 생성

1
Animal cat = new Animal();
cs

 

객체와 인스턴스의 차이

 

인스턴스 : 클래스에 의해서 만들어진 객체이며, 위에서 cat은 객체. 

cat이라는 객체는 Animal의 인스턴스(instance). 

 

즉, "cat은 인스턴스" 보다는 "cat은 객체" 이며, Animal의 객체가 아닌 "cat은 Animal의 인스턴스" 라고 표현한다.

 

 

붕어빵 틀은 클래스, 붕어빵 틀에 의해 만들어진 붕어빵 들은 객체

또는 Animal은 클래스이고 고양이와 개, 말 등은 객체

 

아래와 같이 Animal 클래스에서 무수히 많은 동물 객체들이 생성될 수 있다.

1
2
3
4
Animal cat = new Animal();
Animal dog = new Animal();
Animal horse = new Animal();
...
cs

 

 

Animal 클래스에 인스턴스 변수(또는 멤버변수나 속성) name을 추가

인스턴스 변수에 접근하려면 인스턴스.변수 와 같이 접근한다. (cat.name)

1
2
3
4
5
6
7
8
9
10
11
package jump2java;
 
public class Animal {
        String name;
    
    public static void main(String [] args){
        Animal cat = new Animal();
        System.out.println(cat.name);
    }
}
 
cs

 

Output :

null

 

 

값이 할당되지 않았기에 null이 출력된다.

 

 

 

특정 클래스가 있는 자바 파일 내에 또 다른 클래스 정의 가능
 * - 단, 원래 클래스가 아닌 다른 클래스들은 public 키워드를 붙일 수 없다!

 

 

Java의 메소드 

Java에서 클래스 내에 구현된 함수를 메소드라고 한다. 

(함수라는 용어를 쓰지 않으며, 클래스 내에서만 사용가능)

 

아래와 같이 return값이 없는 void 메소드를 정의해준다. 

return값이 없다는 거에 당황할 수 있지만 setName의 name은 메소드 내에서 할당되며 돌려주는 값은 없다.

 

 

this 키워드

아래의 코드에서 Animal 클래스의 인스턴스 변수명도 name, SetName 메소드의 인수도 name이다. (String name)

아래 예제에서 this는 Animal 클래스에 의해서 생성된 인스턴스를 가리키며,  cat을 가리킨다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package jump2java;
 
public class Animal {
        String name;
        
    public void setName(String name) {
        this.name = name;
    }
    
    public static void main(String [] args){
        Animal cat = new Animal();
        cat.setName("Ludwig");
        System.out.println(cat.name);
    }
}
cs

 

Output :

Ludwig

 

 

 

 

메소드 내에서만 쓰이는 지역 변수 (local variable)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package jump2java;
 
public class Test {
        String name;
        
        public void vartest(int a) {
            a++;
        }
 
        public static void main(String[] args) {
            int a = 1;
            Test myTest = new Test();
            myTest.vartest(a);
            System.out.println(a);
        }
}
 
cs

 

Output :

1

 

 

vartest 메소드의 인수 a는 메소드 안에서만 쓰이는 변수이며, 메소드 밖(main함수)의 변수 a가 아니다.

메소드에서 쓰이는 변수는 지역변수로 밖의 변수와는 상관없다.

 

위에서 vartest 메소드를 이용해 값을 증가시키려면 다음과 같이 쓴다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package jump2java;
 
public class Test {
        String name;
        
        public int vartest(int a) {
            a++;
            return a;
        }
 
        public static void main(String[] args) {
            int a = 1;
            Test myTest = new Test();
            a = myTest.vartest(a);
            System.out.println(a);
        }
}
 
cs

 

입력으로 들어온 값이 1만큼 증가해 return되며 2가 출력된다.

주의할 점은, 이 역시 vartest 메소드 안의 a 변수와 메소드 밖의 a 변수는 다른 것이다!

 

 

Call by value

 

메소드에 을 전달하는 것과 객체를 전달하는 것의 차이를 알 수 있는 예제이다.

다음은 메소드에 값을 전달하는 예제이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package jump2java;
 
class updator {
    void update(int cnt) {
        cnt++;
    }
}
 
public class Counter {
    int count = 0;
 
    public static void main(String[] args) {
        Counter myCounter = new Counter();
        System.out.println(" 초기 값 " + myCounter.count);
        updator myUpdator = new updator();
        myUpdator.update(myCounter.count);
        System.out.println(" update 값 " + myCounter.count);        
    }
}
cs

Output : 

 초기 값 0

 update 값 0

 

위의 예제는 값이 바뀌지 않음을 알 수 있다. update 메소드는 값을 전달받았으며, cnt 변수는 메소드 안에서만 쓰이는 변수이기 때문이다.

 

아래 예제는 객체를 전달해서 객체의 속성 값을 변경하도록 한 예제이다. 

위와 같이 int cnt로 값을 전달받는 것이 아니라 Counter cnt 와 같이 객체를 전달받도록 했다. (Counter 자료형 변수 cnt를 입력받아 증가시킴)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package jump2java;
 
class updator {
    void update(Counter cnt) {
        cnt.count++;
    }
}
 
public class Counter {
    int count = 0;
 
    public static void main(String[] args) {
        Counter myCounter = new Counter();
        System.out.println(" 초기 값 " + myCounter.count);
        updator myUpdator = new updator();
        myUpdator.update(myCounter);
        System.out.println(" update 값 " + myCounter.count);        
    }
}
cs

Output:

초기 값 0

update 값 1

 

 

자바에서의 상속

 

자바에서는 클래스 상속을 위해서 extends 키워드를 사용한다. Dog 클래스가 Animal 클래스를 상속함 (물려받음)

1
2
3
public class Dog extends Animal {
 
}
cs

 

먼저 프로젝트에서 Animal 클래스와 Dog 클래스를 생성한다.

 

Animal.java

1
2
3
4
5
6
7
8
9
10
11
12
13
package jump2java;
 
public class Animal {
    String name;
    
    public void setName(String name) {
        this.name = name;
    }
 
    public static void main(String[] args) {
        
    }
}
cs

 

Dog.java

1
2
3
4
5
6
7
8
9
10
package jump2java;
 
public class Dog extends Animal {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.setName("Ludwig");
        
        System.out.println(dog.name);
    }
}
cs

Output :

Ludwig

 

Dog 클래스에서는 setName 메소드를 정의하지 않았지만, Animal 클래스를 상속했으므로 setName 메소드를 그대로 사용할 수 있다.

 

 

Dog.java에 bark 메소드를 하나 추가해보자.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package jump2java;
 
public class Dog extends Animal {
    public void bark() {
        System.out.println(this.name + "은 멍 멍! 하고 짖었다!");
    }
    
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.setName("Ludwig");
        
        System.out.println(dog.name);
        dog.bark();
    }
}
cs

 

Output :

Ludwig

Ludwig은 멍 멍! 하고 짖었다!

 

 

메소드 오버라이딩 

 

HouseDog.java

 

아래와 같이 HouseDog 클래스에 Dog 클래스와 동일한 원형의 bark 메소드를 구현하였다.

1
2
3
4
5
6
7
8
9
10
11
12
13
package jump2java;
 
public class HouseDog extends Dog {
    public void bark() {
        System.out.println(this.name + "는 도둑을 보면 짖는다");
    }
    
    public static void main(String[] args) {
        HouseDog houseDog = new HouseDog();
        houseDog.setName("Toni");
        houseDog.bark();
    }
}
cs

Output (HouseDog.java에서 실행결과) : 

Toni는 도둑을 보면 짖는다

 
부모클래스의 메소드를 자식클래스가 동일한 원형으로 정의했지만, HouseDog 클래스에서 bark 메소드는 Dog 클래스의 bark 메소드보다 더 높은 우선순위를 갖게 된다. 그 결과, HouseDog 클래스의 bark 메소드가 호출되고 위와 같은 결과가 나온다.

 

이렇게 부모 클래스의 메소드를 자식 클래스가 동일한 원형을 가지고 재정의 하는 행위를 Method Overriding(메소드 덮어씌우기)이라고 한다. 

 

 

자바는 다중상속을 지원하지 않는다

다중상속의 모호함 때문에 자바는 일반 클래스의 다중상속을 지원하지 않는다. 

 

 

생성자

HouseDog클래스로 만든 인스턴스에 setName 메소드를 생성하지 않으면, name 인스턴스 변수에 값이 할당되지 않았기에 null이 출력된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package jump2java;
 
public class HouseDog extends Dog {
    public void bark() {
        
        System.out.println(this.name + "은(는) 도둑을 보면 짖는다");
    }    
    
    public static void main(String[] args) {
        HouseDog houseDog = new HouseDog();
        //houseDog.setName("Toni");        
        houseDog.bark();
    }
}
cs

Output :

null은(는) 도둑을 보면 짖는다

 

 

생성자(Constructor)를 이용하면 name 이라는 인스턴스 변수를 무조건 초기화하도록 강제할 수 있다.

아래 소스에서 public HouseDog(String name) { ... 과 같이 메소드명이 클래스명과 동일하고 반환형이 없는 메소드가 생성자이다.

 

1
2
3
4
5
6
7
8
9
10
11
12
package jump2java;
 
public class HouseDog extends Dog {
    public HouseDog(String name) {
        this.setName(name);
    }
    
    public static void main(String[] args) {
        HouseDog houseDog = new HouseDog();
        System.out.println(houseDog.name);
    }
}
cs
Output :
Exception in thread "main" java.lang.Error: 분석되지 않는 컴파일 문제점: 
생성자 HouseDog()이(가) 정의되지 않았습니다.
 
at jump2java.HouseDog.main(HouseDog.java:9)
 

생성자의 규칙대로 객체를 선언하지 않았기 때문에 컴파일 오류가 발생한다. (String변수로 값을 전달해 setName메소드 호출)

위의 소스 9번째 줄을 다음과 같이 변경해주면 정상적으로 컴파일되고 실행결과를 출력한다.

 

9
HouseDog houseDog = new HouseDog("Toni");
cs

Output :

Toni

 

 

생성자의 규칙

  1. 클래스명과 메소드명이 동일하다.
  2. 리턴타입을 정의하지 않는다.

 

default 생성자

1
2
3
4
5
6
7
8
public class Dog extends Animal {
    public Dog() {
    }
 
    public void sleep() {
        System.out.println(this.name + " zzz");
    }
}
cs

만약 생성자를 정의하지 않았다면 public Dog() {    } 와 같은 default 생성자를 컴파일러가 자동 생성한다.

생성자를 정의한다면 컴파일러는 따로 생성자를 만들지 않고, 그 생성자의 정의대로만 객체를 선언할 수 있다.

 

생성자 오버로딩

하나의 클래스에 다음과 같이 입력항목(인수)이 다른 여러개의 생성자를 만들 수 있다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package jump2java;
 
public class HouseDog extends Dog {
    public HouseDog(String name) {
        this.setName(name);
    }
 
    public HouseDog(char type) {
        if (type == 'm') {
            this.setName("Steve");
        } else if (type == 'f') {
            this.setName("Stephanie");
        }
    }
 
    public static void main(String[] args) {
        HouseDog houseDog = new HouseDog("Toni");
        System.out.println(houseDog.name);
        HouseDog male = new HouseDog('m');
        HouseDog female = new HouseDog('f');
        System.out.println(male.name);
        System.out.println(female.name);
    }
}
cs

 

Output :

Toni

Steve

Stephanie

 

위의 소스에서 HouseDog 클래스는 두 개의 생성자를 갖는다. 하나는 String type, 하나는 char type을 입력으로 받는 생성자이다.

메소드 오버로딩과도 비슷한 개념이다. 단, 메소드 오버로딩은 반환형은 반드시 일치해야 함에 유의!

 

오버로딩 시 시그니처가 같다면 오버로딩할 수 없다.

시그니처란 매개변수의 리스트를 가리키며 매개변수의 개수와 타입, 그 순서까지 모두 같다면 시그니처가 같다.

리턴값만 다를 경우 오버로딩이 성립되지 않는다.

 

그리고 오버로딩과 오버라이딩은 완전히 다른 개념이다.  

'Study > Java' 카테고리의 다른 글

Java Network 프로그래밍 기초  (0) 2017.06.03
NIO 기반 네트워킹  (0) 2017.05.30
JAVA - NIO  (0) 2017.05.29
Java - OOP_인터페이스와 다형성  (0) 2017.03.20
Java 개발PC 설정 및 기초  (0) 2017.03.16
728x90

jquery-1.9.1.js

autolink.js


 두 파일 다운 받아 관리메뉴에서 HTML/CSS 편집-파일 업로드에 추가



<title> 위에 다음 소스 추가


1
2
3
4
5
6
7
<!-- 소스코드 서식1-->
 
<SCRIPT type=text/javascript src="./images/autolink.js"></SCRIPT>
 
<SCRIPT type=text/javascript src="./images/jquery-1.9.1.js"></SCRIPT>
 
<!-- 소스코드 서식1 끝-->
cs



페이지 가장 아래 부분에 다음 소스 추가


1
2
3
4
5
6
7
<!-- 소스코드 서식2 -->
 
<SCRIPT type=text/javascript>
autolink($('#content'));
</SCRIPT>
 
<!-- 소스코드 서식2 끝 -->
cs


728x90

참고 강의 : https://wikidocs.net/book/31


JDK 다운로드 : 

http://www.oracle.com/technetwork/java/javase/downloads/index.html?ssSourceSiteId=otnjp/


JDK 다운로드 시 오픈소스인 8 버전을 받는다


자바의 소스코드 파일명은 *.java 

이것을 컴파일하면 *.class 파일이 생성되며 Java VM이 class 파일의 바이너리 코드를 해석해 실행한다.


JVM은 이란 중간 단계를 거치기 때문에 속도면에선 단점이 있지만 모든 OS에서 실행가능한 장점을 가진다.



javac (Compiler) 확인 

: 콘솔에서 javac 실행


참고 : 주석은 프로그램 실행과는 상관없이 코드에 설명을붙인 것을 말한다.컴파일 과정에서 주석은 무시되고 실행문만  바이트 코드로 번역된다. 따라서 주석을 많이 작성한다고 해서 전체 프로그램의 크기가 커지는 것은 아니므로 가급적이면 설명이 필요한 코드에 주석을 달아 두는 것이 좋다.


명령실행이 안되면 환경변수 추가

: 컴퓨터-속성-고급 시스템 설정-고급 탭에서 환경변수 추가

( ...); C:\Program Files\Java\jdk1.8.0_121\bin


jdk tools 환경변수 추가

시스템 변수 - 새로만들기    

변수이름 : CLASSPATH

변수 값 : .;C:\Program Files\Java\jdk1.8.0_181\lib\tools.jar;


이클립스 설치 (Get Eclipse Neon)

http://www.eclipse.org/downloads/


처음 실행할 때 작업공간(work space) 설정



프로젝트 생성

File -> New -> Java Project


신규 클래스 생성

File -> New -> Class



메인 메소드 작성 (HelloWorld)

1
2
3
4
5
6
7
package jump2java;
 
public class HelloWorld {
    public static void main(String args[]) {
        System.out.println("Hello World");
    }
}
cs

public class 


Run -> Run As -> Java Application로 실행하면 아래 창에 실행결과가 뜬다.

(단축기 Ctrl + F11 이며 Window-Preferences-General-Keys에서 단축키 설정 가능)


이클립스 소스 자동 정렬기능

Ctrl + Shift + F


문자열 출력

1
2
3
4
5
6
7
8
9
package jump2java;
 
public class HelloWorld {
    public static void main(String[] args) {
        String name = "홍길동";
        System.out.println("내 이름은  " + name + "입니다.");
    }
}
 
cs

(" " + 변수명 + " ");



사용자 정의 자료형 정의


Animal 클래스를 먼저 정의

class Animal {
}

Animal 자료형 변수 cat

Animal cat;



자바의 부울 자료형 예제


1
2
3
4
5
6
7
8
9
package jump2java;
 
public class HelloWorld {
    public static void main(String args[]){
        int i=3;
        boolean isOdd = i % 2 == 2;
        System.out.println(isOdd);
    }
}
cs

Output : false



자바에서 문자열을 new 키워드로 객체 생성 가능 (하지만 가독성과 컴파일 최적화를 이유로 권장되지는 않음)


String a = new String("Happy Java");
String b = new String("a");
String c = new String("123");

primitive(원시) 자료형

int, long, double, float, boolean, char 등을 자바에서 primitive 자료형이라하며, new 키워드로 생성 불가 (literal 로만 초기화 가능)


문자열 비교 equals
== 은 두개의 자료형이 동일한 객체인지를 판별할 때 사용하는 연산자이기 때문에 문자열을 비교할 때는 equals를 쓴다.

1
2
3
4
5
6
7
8
9
10
package jump2java;
 
public class HelloWorld {
    public static void main(String args[]){
        String a = "hello";
        String b = new String("hello");
        System.out.println(a.equals(b));
        System.out.println(a==b);
    }
}
cs

Output : 

true

false



문자열의 index를 return하는 indexOf


1
2
3
4
5
6
7
8
9
package jump2java;
 
public class HelloWorld {
    public static void main(String args[]){
        String a = "Hello Java";
        System.out.println(a.indexOf("Java"));
    }
}
 
cs

Output

6



substring 메소드

1
2
3
4
5
6
7
8
9
package jump2java;
 
public class HelloWorld {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        sb.append("Hello");
        System.out.println(sb.substring(04));
    }
}
cs
Output :
Hell

end index의 문자는 제외되고 출력된다.


배열의 길이를 알 수 있는 length 메소드
1
2
3
4
5
6
7
8
9
10
package jump2java;
 
public class HelloWorld {
    public static void main(String[] args) {
        String[] weeks = {"월""화""수""목""금""토""일"};
        for (int i=0; i<weeks.length; i++) {
            System.out.print(weeks[i]);
        }
    }
}
cs

Output :

월화수목금토일



제네릭스 (Generics)


제네릭스를 사용하지 않은 경우

1
2
3
4
5
6
ArrayList aList = new ArrayList();
aList.add("hello");
aList.add("java");
 
String hello = (String) aList.get(0);
String java = (String) aList.get(1);
cs


다음과 같이 형 변환이 필요

1
2
String hello = (String) aList.get(0); // Object 를 String 으로 캐스팅한다. (String)
 
cs


제네릭스를 사용한 경우

1
2
3
4
5
6
ArrayList<String> aList = new ArrayList<String>();
aList.add("hello");
aList.add("java");
 
String hello = aList.get(0);
String java = aList.get(1);
cs


명시적으로 type을 지정함으로써 잘못된 형 변환을 피할 수 있다.




맵(Map) 자료형

Map은 Key와 Value라는 것을 한 쌍으로 갖는 자료형이다. Associative array, Hash 라고도 불린다.

keyvalue
people사람
baseball야구

리스트나 배열처럼 순차적이 아닌 key를 통해 value를 얻는다.


제네릭스를 이용한 HashMap 생성

1
import java.util.HashMap;
cs
HashMap을 사용하기위한 import


1
2
3
HashMap<StringString> map = new HashMap<StringString>();
map.put("people""사람");
map.put("baseball""야구");
cs

key와 value가 String 형태인 HashMap 생성, 입력은 put메소드를 이용



List 자료형과 contains 메소드 활용한 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package jump2java;
import java.util.ArrayList;
 
public class HelloWorld {
    public static void main(String[] args) {
        ArrayList<String> pocket = new ArrayList<String>();
        pocket.add("paper");
        pocket.add("handphone");
        pocket.add("money");
 
        if (pocket.contains("money")) {
            System.out.println("택시를 타고 가라");
        }else {
            System.out.println("걸어가라");
        }
    }
}
 
cs


boolean 활용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package jump2java;
import java.util.ArrayList;
 
public class HelloWorld {
    public static void main(String[] args) {
        boolean watch = true;    // false 대입하면 걸어가라 
        ArrayList<String> pocket = new ArrayList<String>();
        pocket.add("paper");
        pocket.add("handphone");
 
        if (pocket.contains("money")) {
            System.out.println("택시를 타고 가라");
        }else if(watch) {
            System.out.println("택시를 타고 가셈");
        }else {         
            System.out.println("걸어가라");
        }
    }
}
 
cs

Output : 

택시를 타고 가셈




for each 문

for문과 동일한 키워드이나 조건식이 다르다.

1
2
3
for (type var: iterate) {
    body-of-loop
}
cs

iterate는 루프를 돌릴 객체이며, 한개씩 순차적으로 var에 대입되어 for문을 수행. 

iterate부분에 들어가는 타입은 배열 및 ArrayList 등이 가능.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package jump2java;
import java.util.ArrayList;
 
public class HelloWorld {
    public static void main(String[] args) {
        ArrayList<String> aList = new ArrayList<String>();
        aList.add("abc");
        aList.add("DEF");
        
        String[] numbers = {"one""two""three"};
        for(String number: numbers) {
            System.out.print(number+" ");
        }
        System.out.print("\n");
        for(String hello: aList) {
            System.out.println(hello);
        }
    }
}
 
cs


Output :

one two three 

abc

DEF



'Study > Java' 카테고리의 다른 글

Java Network 프로그래밍 기초  (0) 2017.06.03
NIO 기반 네트워킹  (0) 2017.05.30
JAVA - NIO  (0) 2017.05.29
Java - OOP_인터페이스와 다형성  (0) 2017.03.20
Java - OOP_클래스와 상속, 생성자, 오버로딩/오버라이딩  (0) 2017.03.17
728x90

출처 : CSS실습 - 생활 코딩 (https://opentutorials.org/course/1688/9351)



확장 프로그램 다운로드 : https://chrome.google.com/webstore/search/stylebot

728x90

https://atom.io/

에서 다운로드


open folder를 눌러 기본 폴더(document root)를 지정할 수 있다.



왼쪽에 다큐멘트 루트의 모든 파일들이 보인다.

파일 이름을 더블클릭하면 탭이 생기며, 쉽게 작업전환이 가능해진다. (Ctrl+tab으로 탭 전환 가능)


왼쪽 화면을 토글 트리 뷰라고 부르며, 아무곳이나 폴더명 위에 우클릭하면 새로운 파일이나 폴더를 만들 수 있다.


토글 트리뷰를 숨기려면 view-toggle tree view 선택 또는 단축키 Ctrl + \ (w가 아니다 \)를 입력하면 된다.


소스를 입력하는 창에서 우클릭-Split 메뉴를 통해 상하좌우를 화면을 분할해서 작업이 가능하다. 또는 탭을 끌어다가 놓으면 분할이 된다.


ctrl + 마우스 휠 업, 휠 다운으로 화면 크기 조정이 가능하다. 



확장기능(패키지) 설치


File-Settings 선택, Install-Install Packages에서 emmet 검색 후 install


자동 완성 기능

html이라고 입력 후 tab-엔터를 눌러보자. <html></html>이라고 자동완성이 되는 것을 볼 수 있다.


li*3 입력 후 tab 치면 <li></li>가 3개 만들어진다.


그 외 단축키

ctrl을 누른 상태로 여러 코드를 마우스 드래그를 하면 다중 선택(multi-selection)이 가능하며, 그 상태에서 한번에 여러 곳을 같이 수정할 수 있다.


ctrl + alt + 오른쪽 방향키를 누르면 다음 편집할 곳으로 이동



728x90

웹서버를 편하게 관리할 수 있는 bitnami


https://bitnami.com/stack/wamp/installer 

Recommended 버전 다운로드 클릭, No thanks, just take me to the download 선택


  1. Components에서 모두 체크 해제 후 next (PhpMyAdmin은 기본 선택)
  2. 6자 이상의 데이터베이스 루트 유저 비번 입력
  3. cloud with Bitnami 체크박스 해제 후 next
  4. 설치과정에서 보안경고시 방화벽 해제 허용 - Finish! 


설치 후 Bitnami가 실행되면서 웹페이지가 열리는데, 이것은 localhost에서 보여주는 것이다.

htdocs라는 디렉토리의 index.html 을 읽어 웹브라우저에 보여주는 것인데, 이것은 다음이 경로에서 확인가능하다.


C:\Bitnami\wampstack-5.6.30-1\apache2\htdocs    (설치 시 기본 경로)


메모장을 열어 아래의 소스를 작성한다. 

저장할 때는 *.html, utf8로 저장하고 위의 htdoc폴더에 넣어준다.


1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
</head>
<body>
    <h1>JavaScript</h1>    
    <h2>JavaScript</h2>
</body>
</html>
cs


1행의 DOCTYPE은 문서의 타입을 알려주는 것이며 html 뒤에 아무것도 적지 않으면 표준 (5.0)의 문서임을 알리는 것이다.

html의 본질은 링크이며, 아래 소스에서 <html>은 시작태그, 빗금이 있는 </html>은 끝 태그라고 한다.  (또는 열린 태그, 닫힌 태그)


태그는 정보를 담거나 강조를 하기 위한 것으로, html은 문서의 , head는 문서의 정보, body는 문서의 본문을 나타낸다.

태그의 종류와 사용법은 https://opentutorials.org/course/1058 에서 확인 가능하다.



이후에 http://localhost:81/*.html 로 접속하면 페이지가 보일 것이다. (81은 포트 번호이며 설정에서 변경 가능)

만약에 index.html로 저장하였다면 그냥 localhost혹은 localhost:포트번호  로 접속하면 된다.




bitnami외에도 APMSETUP 모니터란 프로그램을 통해서도 웹서버를 제어할 수 있다. 

(APMSETUP 모니터 설치시 htdocs 경로는 C:\APM_Setup\htdocs 가 됨)




크롬에서 검사를 통해 요소의 값을 변경해보기


우클릭-검사를 누르면 오른쪽에 창이 생긴다. 

여기서 오른쪽 아래의 숫자값을 더블클릭해 값을 입력하거나 PgUP, PgDn으로 실시간으로 변경되는 하면을 볼 수 있다.




디버깅하기

Ctrl+Shift+J를 눌러 Console창의 에러메시지를 확인


php 에러를 찾을 때는 C:\Bitnami\wampstack-5.6.30-1\php 폴더의 php.ini 을 수정해 에러메시지를 브라우저에 노출시키는 방법이 있다. (보안상 실제 서비스시에는 비권장)


display_errors = off를 on으로 변경한 후, 아파치를 restart하면 다음과 같이 브라우저에 직접 노출되는 에러메시지를 볼 수 있게 된다.

 

Parse error: syntax error, unexpected '<' in C:\APM_Setup\htdocs\phpjs\1.php on line 10


혹은 \Apache(혹은 2)\logs 폴더의 error.log 파일을 열어 기록된 에러 메시지를 볼 수도 있다.


php 소스 코드 변경시 즉시 반영되게 하려면 opcache.enable=0 를 1로 변경한 후, 아파치를 restart한다.

'Web Develop > Web Programming' 카테고리의 다른 글

WebRTC 및 Node 등 스터디  (0) 2022.02.25
Spring Boot시작하기  (0) 2021.08.10
html 기초  (0) 2021.01.07
반응형 웹 만들기  (0) 2017.03.23
HTML 5 미지원 브라우저 고려하기  (0) 2017.03.21
728x90

Always On Top


http://ej.bantz.com/aot/


설치 후 tray에서 우클릭-고정하고자 하는 창에 체크

+ Recent posts